Kafka主题,分区,副本介绍

简介: 今天分享一下kafka的主题(topic),分区(partition)和副本(replication),主题是Kafka中很重要的部分,消息的生产和消费都要以主题为基础,一个主题可以对应多个分区,一个分区属于某个主题,一个分区又可以对应多个副本,副本分为leader和follower。

介绍


今天分享一下kafka的主题(topic),分区(partition)和副本(replication),主题是Kafka中很重要的部分,消息的生产和消费都要以主题为基础,一个主题可以对应多个分区,一个分区属于某个主题,一个分区又可以对应多个副本,副本分为leader和follower。


副本的作用是保证数据的高可用,一个副本在一个broker节点上,broker就是一个台机器或者一个kafka实例,当某个副本出现故障后,还可以使用其他副本的数据,如果只有一个副本,那么就无法保证高可用。


主题,分区实际上只是逻辑概念,真正消息存储的地方是副本的日志文件上,所以主题分区的作用是在逻辑上更加规范的管理日志文件。


主题,分区,副本关系如图所示:



创建主题分区


可以使用kafka-topics.sh创建topic,也可以使用Kafka AdminClient创建,当我们往Kafka发送消息的时候,如果指定的topic不存在,那么就会创建一个分区数为1的topic,不过这样做并不合适,我们应该规划好主题的分区,副本,然后在创建topic,这样对管理topic更加好。


kafka broker端默认设置了allow.auto.create.topics=true,所以会自动创建topic,为了更加规范和合理管理topic,我们可以将其设置为false,当然,一般情况下中我们肯定会进行手动创建topic,但是以防不确定因素,将其设置为false更保险一些。


使用kafka-topics.sh创建主题


bin/kafka-topics.sh --create --bootstrap-server 127.0.0.1:9092 --replication-factor 1 --partitions 2 --topic pig


使用Kafka AdminClient


创建topic名字为pig,分区数为1,副本数为1的分区。


Properties properties = new Properties();
properties.setProperty(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:9092");
AdminClient adminClient = AdminClient.create(properties);
//创建topic
NewTopic newTopic = new NewTopic("pig", 4, (short) 2);
CreateTopicsResult result = adminClient.createTopics(Collections.singleton(newTopic));


需要注意的是,如果使用的是单机kafka,所以只有一个broker,如果副本设置大于1,那么就会抛出异常,因为一个副本对应一个broker。


创建了主题分区后,会在配置我们配置的日志目录(log.dirs)下生成对应的分区副本文件夹。


分区,副本详解


上面创建了分区数为4,副本为2的topic,使用命令


bin/kafka-topics.sh --describe --topic musk --bootstrap-server 127.0.0.1:9092


查看分区情况。


如下名为musk的topic,分区数(PartitionCount)为4,副本数(ReplicationFactor)为2,有三个broker,kafka会将副本合理的划分到不同的机器上。



里面的数字0,1,2代表broker的唯一标识,因为在配置kafka集群的时候,三台机器的broker.id分别为0,1,2。


可知分区0的副本Leader在机器2上,副本follower在机器1上面,机器0上不存在分区0的副本,分区1的副本Leader在机器1上,副本follower在机器0上面,机器2上不存在分区1的副本,分区2和分区3以此类推。


从上面可以看出kafka要创建4个分区,每个分区对应两个副本,所以就存在8个副本,8个副本要平均分配到3台机器上上,所以就按照3:3:2的比例分配副本,是按照平均分配的方式进行分配的。


下面我们创建分区数为4,副本为3的分区,如图所示。



可以看出,副本平均分配到了0,1,2三台机器上,每个分区有3个副本,所以4个分区有一共有12个副本。


可以看出是4个分区,每个分区3个副本,所以就有12个副本,12个副本分配到3台机器上面,所以比例是4:4:4


AR,ISR,OSR


AR 集合(Assigned Replica set):AR 集合是指已经被分配到的分区副本集合。在 Kafka 集群中,每个分区都有若干个副本,其中一个是 leader 副本,负责处理读写请求,其他的是 follower 副本,用于备份数据和提高可用性。AR 集合就是所有被分配到的副本的集合,包括 leader 和 follower 副本。


ISR 集合(In-Sync Replica set):ISR 集合是指当前处于同步状态的副本集合。ISR 集合是 AR 集合的子集,即 ISR 集合中的副本与 leader 副本保持同步。如果一个 follower 副本与 leader 副本失去同步,那么它将从 ISR 集合中移除。


OSR 集合(Out-of-Sync Replica set):OSR 集合是指当前处于不同步状态的副本集合。OSR 集合是 AR 集合的另一个子集,即 OSR 集合中的副本与 leader 副本失去同步。这些副本可能正在追赶 leader,或者发生了某些错误导致与 leader 失去同步。在某些情况下,如果 ISR 集合缩小到了一个不可接受的程度,就需要将 OSR 集合中的副本加入 ISR 集合中,以保证可用性。


今天的分享就到这里,感谢你的观看,我们下期见!



目录
相关文章
|
1月前
|
消息中间件 监控 安全
探究Kafka主题删除失败的根本原因
探究Kafka主题删除失败的根本原因
43 0
|
1天前
|
消息中间件 Kafka 程序员
Kafka面试必备:深度解析Replica副本的作用与机制
**Kafka的Replica副本是保证数据可靠性的关键机制。每个Partition有Leader和Follower副本,Leader处理读写请求及管理同步,Follower被动同步并准备成为新Leader。从Kafka 2.4开始,Follower在完全同步时也可提供读服务,提升性能。数据一致性通过高水位机制和Leader Epoch机制保证,后者更精确地判断和恢复数据一致性,增强系统容错能力。**
7 1
|
1月前
|
消息中间件 存储 网络协议
Kafka 线程模型痛点攻克: 提升分区写入 2 倍性能
Apache Kafka的单分区写入性能在某些严格保序场景中至关重要,但其现有线程模型限制了性能发挥。本文分析了Kafka的串行处理模型,包括SocketServer、KafkaChannel、RequestChannel等组件,指出其通过KafkaChannel状态机确保请求顺序处理,导致处理效率低下。AutoMQ提出流水线处理模型,简化KafkaChannel状态机,实现网络解析、校验定序和持久化的阶段间并行化,提高处理效率。测试结果显示,AutoMQ的极限吞吐是Kafka的2倍,P99延迟降低至11ms。
46 3
Kafka 线程模型痛点攻克: 提升分区写入 2 倍性能
|
26天前
|
消息中间件 监控 安全
探究Kafka主题删除失败的根本原因
探究Kafka主题删除失败的根本原因
10 0
|
1月前
|
SQL 消息中间件 Kafka
实时计算 Flink版产品使用合集之支持sink到多分区的kafka ,还能保持有序吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
消息中间件 负载均衡 监控
【Kafka】Kafka 创建Topic后如何将分区放置到不同的 Broker 中?
【4月更文挑战第13天】【Kafka】Kafka 创建Topic后如何将分区放置到不同的 Broker 中?
|
1月前
|
消息中间件 监控 Kafka
【Kafka】分区副本中的 Leader 如果宕机但 ISR 却为空该如何处理
【4月更文挑战第12天】【Kafka】分区副本中的 Leader 如果宕机但 ISR 却为空该如何处理
|
1月前
|
消息中间件 运维 监控
【Kafka】分区副本什么情况下会从 ISR 中剔出
【4月更文挑战第12天】【Kafka】分区副本什么情况下会从 ISR 中剔出
|
14天前
|
消息中间件 存储 Kafka
实时计算 Flink版产品使用问题之通过flink同步kafka数据进到doris,decimal数值类型的在kafka是正常显示数值,但是同步到doris表之后数据就变成了整数,该如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
14天前
|
消息中间件 存储 Kafka
实时计算 Flink版产品使用问题之 从Kafka读取数据,并与两个仅在任务启动时读取一次的维度表进行内连接(inner join)时,如果没有匹配到的数据会被直接丢弃还是会被存储在内存中
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。