我读过消费者控制台中的线程boostrap服务器vs zookeeper,但这还不清楚我的疑问。
我的疑问是,假设Zookeeper在localhost:2181,三个代理服务器正在运行localhost:9092, localhost:9093, localhost:9094 and 我们有一个主题myu主题,分区3和复制1,这个主题由代理共享,因为它有三个分区。
在新版本的apachekafka中,当我们运行消费者控制台时,我们需要 --bootstrap-server localhost:9092
这是一个代理地址,但在早期版本中,我们传递的是zookeeper地址。
因此,当我们运行consumer来使用来自主题的消息时 my_topic
,我们正在传递参数 --bootstrap-server localhost:9092
这只不过是一个代理地址,所以我的问题是,我们是否限制消费者只能使用来自该代理的消息,如果是这样,那么假设该代理本身关闭了,那么消费者将如何读取来自该主题的消息。我不明白它是怎么工作的,请有人把它弄清楚。
运行使用者的旧版本命令(<1.0) bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from- beginning --topic my_topic
运行使用者的更新版本命令(>=1.0) bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my_topic
1条答案
按热度按时间cunj1qz11#
在以前的kafka版本(0.9.0之前)中,使用者需要连接到zookeeper以提交偏移量和获取主题元数据。从0.9.0开始,使用者offeset保存在kafka主题(\uu consumer\u offset)中,不再需要与zookeeper的连接。
您在表格中指定了什么
--bootstrap-server
参数正是名称。。说。这是一个bootstrap服务器列表:它意味着使用者连接到您指定的代理,并要求获得有关它想要使用的主题的元数据。它不局限于只使用来自列表中列出的代理的消息--bootstrap-server
参数。假设您指定“kafka1:9092”作为引导服务器(在一个集群中,如您所说,您有3个代理)。连接后,使用者发送元数据请求以获取有关“我的主题”的信息。“kafka1”服务器可能会回答“我不是我的\主题的分区0的负责人,这里是代理,它是该kafka2的负责人”。此时,消费者连接到“kafka2”代理开始获取消息。