我是Apache Kafka的新手 . 我不了解Apache Kafka中主题和分区的解剖结构以及Producer将数据推送到分区的方式 .
考虑一个场景,我有两个 生产环境 者PR1,PR2和三个经纪人B1,B2,B3 . 并且一个主题T1与三个分区为P1,P2,P3分成三个代理 . 现在,第一个 生产环境 者PR1与Zookeeper协调,找到Broker并将消息推送到T1-P1,并将消息推送到T1-P1,并将消息推送到T1-P1 . 我怀疑的是第二条记录被推了 . 它是否会推动分区P2或P3?或者第一条记录本身并行推送到所有三个分区 .
现在,第二个Publisher已加入并向分区发布消息 . 消息被推送到哪里,是否会推送到P1?如果是这种情况已经PR1正在将消息推送到P1,PR1和PR2是否会同时将消息附加到P1背靠背创建偏移量0,1,2,3,4,5 ......?
1 回答
有多个标准可以决定哪个消息进入哪个分区 .
1. Message with Key
当您使用下面的键创建Kafka消息时,它使用默认的散列分区程序来查找分区 . 默认分区程序根据Message键创建哈希码,并找到相应的分区 .
2. Message without message key
它再次使用默认分区程序来查找随机分区程序 .
3. Message with partition number
创建消息时,您还可以手动传递分区号,以便消息转到该分区 .
4. Using Custom Partitioner
您还可以编写一个be-spoke Partitioner类来决定消息必须去哪个分区 .
有关Producer API的更多信息,请查看this
This文章提供了有关如何创建自定义分区程序和默认哈希分区程序的详细信息 .