详谈kafka的主题、分区和副本机制

kafka中有三个特别重要的概念:主题(topic)、分区(partition)和副本(replication)。

我们先来看kafka在创建时候的命令
bin/kafka-topics.sh --zookeeper node01:2181 --create --topic t_cdr --partitions 3 --replication-factor 3
从中可以看出创建需要指定四个参数:–zookeeper、 --topic、–partitions、–replication-factor。第一个为kafka所依赖的集群的管理者的地址,第二个为主题名称,第三个为主题分区的数量,第四个为分区的副本数,下面我主要谈一下后三者的相关知识点。

kafka的消息是以主题为单位进行分类的,生产者负责将消息发送到指定的主题(topic),而消费者则订阅主题消费数据。一个主题可以分为多个分区(partition),一个分区只属于一个主题。同一个主题下不同分区的消息是不一样的,分区在存储方面来讲可以看做成一个可追加的日志文件,消息分别被追加在日志文件的末尾,并却还会维护一个偏移量(offset)。偏移量在分区内是唯一的,kafka通过它来保证同一个分区内消息的顺序性。也就是说,kafka会保证同一个分区内的消息有序,但是不保证主题内的消息有序。

生产者生产的每一条消息,在被发送到broker之前,会先根据分区规则选择存储在那个分区。如果分区规则设置的合理,那么该主题下的所有消息都会被均匀的分布在各个分区中。如果该topic只有一个分区,那么就能保证这个topic所有消息的顺序性,但是这个文件所在的机器的I/O将会是这个主题的性能瓶颈。 而分区则解决了这个问题,但是却不能保证整个topic的顺序性。主题在创建的时候,可以通过指定 --partitions参数来控制分区数量,当然,也可以在创建完后去修改分区的数量。

补充kafka的一个分区规则:kafka对每一条消息的key做一个hashcode运算,然后将得到的数值对分区数量进行模运算就得到了这条消息所在分区的数字。

kafka为了提升分区的容错性,加入了副本机制,通过--replication-factor来指定每一个分区的副本数量。同一分区的几个副本之间保存的是相同的数据(同一时刻,副本之间可能因为没来得及复制,可能不一定完全相同),副本之间的关系是“一主多从”,其中的主(leader)则负责对外提供读写操作的服务,而从(follower)则负责与主节点同步数据,当主节点宕机,从节点之间能重新选举leader进行对外服务。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kafka分区副本是为了提高数据的可靠性和可扩展性而引入的概念。每个Kafkatopic可以分为多个分区,这些分区会均匀地分布在集群的各个节点下。每个分区都是单点的,当其一个分区不可用时,该分区的消息将无法被消费。为了提高分区的可靠性,Kafka引入了副本的概念。副本分区的冗余备份,通过副本机制来实现数据的冗余备份。 创建带有副本topic可以使用以下命令: ``` kafka-topics.sh --create --zookeeper 192.168.10.150:2181 --replication-factor 3 --partitions 3 --topic secondTopic ``` 上述命令创建了一个名为"secondTopic"的topic,该topic有3个分区和3个副本。每个分区都有3个副本,分布在集群的不同节点上。 Kafka提供了数据复制算法来保证副本的可靠性。如果leader副本所在的broker节点宕机或出现故障,或者分区的leader节点发生故障,Kafka会从follower副本选择一个新的leader副本来保证数据的可用性和一致性。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [kafka 消息分发机制分区副本机制](https://blog.csdn.net/weixin_43281498/article/details/124233357)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值