2014-12-22 124 views
0

我有一个主题叫Topic1有两个分区。假设serverATopic1,partition1serverB是追随者的领导者。卡夫卡制作人消息流

如果在我的客户端发布到serverB(在broker.list中,我只指定serverB)会发生什么情况?消息如何传播?它被发送到serverB,然后发送到serverA。

回答

1

要将消息发布到分区,客户机首先从Zookeeper中找到分区的领导,并将消息发送给领导。 领导将消息写入其本地日志。每个追随者使用单个套接字通道不断地从领导者那里获取新消息。追随者将每个收到的消息写入其自己的日志,并将确认发送回领导者。一旦领导者从所有副本接收ISR确认,该消息是致力于

因此,要回答你的问题,如果客户端发布到ServerB,将查询到饲养员知道TOPIC1和分区1中的佼佼者。 Zookeeper回应说serverA是partition1的领导者。因此,客户端将消息发送到serverA(这里我假设分区器会将消息发送到partition1)。

所有这些都由kafka生产者处理。最终用户应用程序不需要担心这些细节。

你可以阅读更多关于这个here

1

我发现这个document在解释内部发生了什么与卡夫卡非常有帮助。

有一个API被生产者用来向任何一个Kafka服务器询问这些分区的分区列表和所有元数据。该元数据包含每个分区的引导代理。生产者调用分区器来获取目标分区,然后直接与该分区的Kafka代理领导进行对话,将消息写入分区。领导者将处理与管理分区复制品的任何其他经纪人的通信。