生产者如何找到 kafka 阅读器

김태우*_*김태우 5 apache-kafka

生产者通过设置 Kafka Broker 列表来发送消息,如下所示。

props.put("bootstrap.servers", "127.0.0.1:9092,127.0.0.1:9092,127.0.0.1:9092");
Run Code Online (Sandbox Code Playgroud)

我想知道“生产者”如何知道三个经纪人中的哪一个知道哪个有分区领导者。对于典型的分布式服务器,要么你有一个承载服务器,要么有一个虚拟IP,但对于Kafka,它是如何加载的?生产者程序是否尝试随机连接到一个代理并寻找具有分区领导者的代理?

Gio*_*ous 8

一个Kafka集群包含多个Broker实例。在任何给定时间,只有一个代理是领导者,而其余代理是包含复制数据的同步副本 (ISR)。当领导者经纪人意外被取消时,其中一个 ISR 就会成为领导者。

\n\n

Kafka 使用 ZooKeeper 选择一个代理\xe2\x80\x99s 分区\xe2\x80\x99s 副本作为领导者。当生产者向主题中的分区发布消息时,该消息将被转发给其领导者。

\n\n

根据卡夫卡文档

\n\n
\n

日志的分区分布在 Kafka 集群中的服务器上,每个服务器处理数据和共享分区的请求。每个分区都在可配置数量的服务器上进行复制,以实现容错。

\n\n

每个分区都有一台充当“领导者”的服务器和零个或\n 多个充当“跟随者”的服务器。领导者处理分区的所有读取和写入请求,而追随者则被动地复制领导者。如果领导者失败,其中一名追随者将自动成为新的领导者。每台服务器都充当其某些分区的领导者和其他分区的追随者,因此负载在集群内得到很好的平衡。

\n
\n\n

您可以使用这段代码找到主题和分区领导者。

\n\n

编辑:

\n\n

生产者将包含主题列表的元请求发送到您在配置生产者时提供的代理之一。

\n\n

来自代理的响应包含这些主题中的分区列表以及每个分区的领导者。生产者缓存此信息,因此它知道将消息重定向到哪里。

\n