3

我是 Apache Kafka 的新手。我不了解 Apache Kafka 中主题和分区的剖析以及 Producer 将数据推送到分区的方式。

考虑一个场景,我有两个生产者 PR1、PR2 和三个代理 B1、B2、B3。一个主题 T1 与三个分区为 P1、P2、P3 拆分为三个代理。现在第一个生产者 PR1 与 Zookeeper 协调并找到 Broker 并推送消息。(比如日志服务器以每秒 1 条记录的速度推送其日志数据)到 T1 - P1 并将偏移量设置为 0。我怀疑第二条记录如何被推。它会推送到分区 P2 还是 P3 ?或者第一条记录本身是并行推送到所有三个分区。

现在第二个发布者加入并发布消息到分区。消息在哪里推送,它会推送到 P1 吗?如果是这种情况,PR1 已经将消息推送到 P1,PR1 和 PR2 是否会同时将消息背靠背附加到 P1,从而创建偏移量 0、1、2、3、4、5....?

4

1 回答 1

3

有多个标准来决定哪个消息去哪个分区。

1. 带钥匙的消息

当您使用如下所示的键创建 Kafka 消息时,它使用默认哈希分区器来查找分区。默认分区器根据消息键创建哈希码并找到相应的分区。

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

2. 没有消息键的消息

它再次使用默认分区器来查找随机分区器。

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

3.带有分区号的消息

创建消息时,您还可以手动传递分区号,因此消息会发送到该分区。

4. 使用自定义分区器

您还可以编写一个定制的 Partitioner 类来决定消息必须去哪个分区。

有关 Producer API 的更多信息,请查看

本文提供了有关如何创建自定义分区器和默认哈希分区器的详细信息。

于 2016-10-23T10:45:02.817 回答