Kafka单节点集群中的consumer不消费?只有把broker=0对应的服务端口起来才会消费,这是为什么?
服务配置如下:
kafka-server-start.sh $KAFKA_HOME/config/server.properties
kafka-server-start.sh $KAFKA_HOME/config/server-1.properties
kafka-server-start.sh $KAFKA_HOME/config/server-2.properties
kafka-server-start.sh $KAFKA_HOME/config/server-3.properties
每个配置文件对应的服务端口是
server.properties 9092 broker=0
server-1.properties 9093 broker=1
server-2.properties 9094 broker=2
server-3.properties 9095 broker=3
zk都是 zookeeper.connect=server00:2181
主机名是 server00
启动后broker1,2,3不能消费
运行命令如下:
kafka-console-producer.sh --bootstrap-server server00:9093,server00:9094,server00:9095 --topic test05
kafka-console-consumer.sh --bootstrap-server server00:9093,server00:9094,server00:9095 --topic test05
请帮忙,谢谢
【相关推荐】
当某个Broker节点由于故障离开Kafka群集时,则存在于该Broker的leader分区将不可用(由于客户端仅对leader分区进行读写操作)。为了最大程度地减少停机时间,需要快速找到替代的leader分区。(副本是不会进行读写的,知识作为备份)
Controller Broker可以对失败的Broker做出响应,Controller Broker可以从Zookeeper监听(zookeeper watch)中获取通知信息,ZooKeeper 赋予客户端监控 znode 变更的能力,即所谓的 Watch 通知功能。一旦 znode 节点被创建、删除,子节点数量发生变化,或是 znode 所存的数据本身变更,ZooKeeper 会通过节点变更监听器 (ChangeHandler) 的方式显式通知客户端。
每个 Broker 启动后,会在zookeeper的 /Brokers/ids 下创建一个临时 znode。当 Broker 宕机或主动关闭后,该 Broker 与 ZooKeeper 的会话结束,这个 znode 会被自动删除。同理,ZooKeeper 的 Watch 机制将这一变更推送给控制器,这样控制器就能知道有 Broker 关闭或宕机了,从而进行后续的协调操作。
Controller将收到通知并对此采取行动,决定哪些Broker上的分区成为leader分区(我印象中,kafka的副本机制都是很分散的,所以选择别的broker分区上面的副本当成主leader),然后,它会通知每个相关的Broker,要么将Broker上的主题分区变成leader,要么通过LeaderAndIsr
请求从新的leader分区中复制数据。
试试在启动consumer时指定分区的方式来消费消息:
kafka-console-consumer.sh --bootstrap-server server00:9093,server00:9094,server00:9095 --topic test05 --partition