我是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 ......?
答案 0 :(得分:3)
有多个标准可以决定哪条消息转到哪个分区。
<强> 1。带密钥的消息
当您使用下面的键创建Kafka消息时,它使用默认的散列分区程序来查找分区。默认分区程序根据Message键创建哈希码,并找到相应的分区。
new ProducerRecord<String, String>("my-topic", "message key", "message")
<强> 2。没有留言键的留言
它再次使用默认分区程序来查找随机分区程序。
new ProducerRecord<String, String>("my-topic", "message")
第3。带分区号的消息
创建消息时,您也可以手动传递分区号,因此消息将转到该分区。
<强> 4。使用自定义分区程序
您还可以编写一个be-spoke Partitioner类来决定消息必须去哪个分区。
有关Producer API的更多信息,请查看this
This文章提供了有关如何创建自定义分区程序和默认哈希分区程序的详细信息。