kafka第二篇——主题创建,主题分区副本分配策略

目录

主题创建

引入

回顾主题,分区,副本关系

代码

主题分区副本分配策略

底层逻辑分析


主题创建

引入

为啥才开始在idea上跑代码,topic都没创建出来,就直接跑出来了?

这是因为AutoTopicCreationManger参数可以自动创建主题,但是这往往不是我们想要的。

Admin 是 Kafka 客户端库中的一个类,它提供了与 Kafka 集群进行管理交互的功能。通过 Admin,你可以执行一些管理操作,如创建主题、删除主题、列出主题、修改配置等。Admin.create()

topic的三个参数

回顾主题,分区,副本关系

主题包含一个或多个分区,每个分区在集群中有多个副本(Replica)分布在不同的 Broker 上。通过合理设计主题、分区和副本的布局,Kafka 可以实现高吞吐量、低延迟和可靠性的分布式消息传递系统。可以看文章kafka1中的架构推演发展历程标题下的内容。

java 复制代码
1. **主题(Topic)**:
   - 主题是消息的逻辑容器,用于将相关的消息组织在一起。生产者(Producer)将消息发布到特定的主题,而消费者(Consumer)则订阅并从主题中接收消息。
   - 一个主题可以拥有多个分区,主题的消息会被分发到不同的分区中,以实现消息的水平扩展和并行处理。

2. **分区(Partition)**:
   - 分区是主题的物理存储单元,每个主题可以被划分为一个或多个分区。分区内的消息是有序的,但整个主题内的消息顺序不保证。
   - 分区的作用是将数据分散存储在不同的 Broker 上,以便实现水平扩展和负载均衡。每个分区在集群中都有多个副本(Replica)进行备份,以确保数据的可靠性和容错性。

3. **Broker**:
   - Broker 是 Kafka 集群中的每个节点(服务器),负责存储分区副本、处理生产者和消费者的请求,以及数据的复制和分发。
   - 每个 Broker 可以存储一个或多个分区的副本,当生产者发送消息时,消息会被写入对应分区的 Leader 副本,然后通过副本同步机制复制到其他副本。
   - 生产者和消费者通过与 Broker 进行通信来发送和接收消息,Broker 之间也会进行数据的同步和复制,以保持数据的一致性和可用性。

综上所述,主题包含一个或多个分区,每个分区在集群中有多个副本(Replica)分布在不同的 Broker 上。通过合理设计主题、分区和副本的布局,Kafka 可以实现高吞吐量、低延迟和可靠性的分布式消息传递系统。

代码

java 复制代码
import org.apache.kafka.clients.admin.Admin;
import org.apache.kafka.clients.admin.AdminClientConfig;
import org.apache.kafka.clients.admin.NewTopic;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;

public class AdminTopicTest {
    public static void main(String[] args) {
        // 配置Kafka集群的Bootstrap服务器地址
        Map<String, Object> confMap = new HashMap<>();
        confMap.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");

        // 创建Admin对象
        try (Admin admin = Admin.create(confMap)) {
            // 创建主题名称
            String topicName = "my-new-topic";
            int numPartitions = 3; // 分区数
            short replicationFactor = 1; // 副本因子
            
            // 构建新主题
            NewTopic newTopic = new NewTopic(topicName, numPartitions, replicationFactor);

            // 创建主题
            admin.createTopics(Arrays.asList(newTopic)).all().get();
            
            System.out.println("Topic created successfully");
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
            System.err.println("Failed to create topic");
        }
    }
}

pom.xml

java 复制代码
<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>2.8.0</version> <!-- 使用最新稳定版本 -->
</dependency>

主题分区副本分配策略

原本

理想状态

kafka内部真实状态

来看kafka的内部实现

所以试试自己更改

底层逻辑分析

controller启动后会同时启动副本状态机和分区状态机没总结完,后续补充

相关推荐
星迹日几秒前
Java: 数据类型与变量和运算符
java·开发语言·经验分享·笔记
南浔Pyer1 小时前
AI驱动的Java开发框架:Spring AI Alibaba实战部署教程
java·人工智能·spring boot·spring·maven·idea
神的孩子都在歌唱3 小时前
行为设计模式 -模板方法模式- JAVA
java·设计模式·模板方法模式
唯余木叶下弦声4 小时前
Python连接Kafka收发数据等操作
大数据·分布式·python·kafka
Satan7125 小时前
【Java】虚拟机(JVM)内存模型全解析
java·开发语言·jvm
远望樱花兔6 小时前
【d54_2】【Java】【力扣】142.环形链表
java·leetcode·链表
IT学长编程6 小时前
计算机毕业设计 助农产品采购平台的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·计算机毕业设计选题·助农产品采购平台
happycao1236 小时前
kafka 消息位移提交几种方式:消息重复消息、消息丢失的关键
中间件·kafka·消息队列
2401_857297916 小时前
2025校招内推-招联金融
java·前端·算法·金融·求职招聘
编啊编程啊程6 小时前
一文上手Kafka【下】
java·分布式·中间件·kafka