git—publisher如何在ApacheKafka中将消息发布到主题?

neskvpey  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(301)

我是Apache·Kafka的新人。我不理解apachekafka中主题和分区的剖析,也不理解生产者将数据推送到分区的方式。
考虑一个场景,我有两个生产者pr1,pr2和三个经纪人b1,b2,b3。一个主题t1,三个分区,p1,p2,p3,拆分到三个代理上。现在,第一个producer pr1与zookeeper协调,找到代理并将消息推送到t1-p1(假设日志服务器以每秒1条记录的速度推送其日志数据),并将偏移量设置为0。我的疑问是第二个记录是如何被推出来的。它会推到分区p2还是p3?或者第一条记录本身是并行地推送到所有三个分区。
现在第二个发布服务器加入并将消息发布到分区。消息推送到哪里,它会推送到p1吗?如果是这种情况,pr1已经将消息推送到p1,那么pr1和pr2是否会同时将消息背靠背地追加到p1,从而创建偏移量0,1,2,3,4,5。。。。?

kzipqqlq

kzipqqlq1#

有多个标准来决定哪个消息要发送到哪个分区。
1带密钥的消息
当您使用如下所示的键创建kafka消息时,它使用默认的散列分区器来查找分区。默认分区器基于消息键创建哈希代码并查找相应的分区。

new ProducerRecord<String, String>("my-topic", "message key", "message")

2没有消息键的消息
它再次使用默认分区器来查找随机分区器。

new ProducerRecord<String, String>("my-topic", "message")

三。带分区号的消息
当您创建消息时,您还可以手动传递分区号,这样消息就会到达该分区。
4使用自定义分区器
您还可以编写一个可以发言的分区器类来决定消息必须转到哪个分区。
有关producerapi的更多信息,请参见
本文提供了有关如何创建自定义分区器和默认哈希分区器的详细信息。

相关问题