我在一个 kafka 集群中创建了两个 kafka 代理。当一个经纪人倒闭时,我无法向 kafka 消费者获取任何数据。我正在使用此命令来读取来自消费者的消息:
bin/kafka-console-consumer.sh --topic test_kafka_cluster \
--bootstrap-server 127.0.0.1:9092,127.0.0.2:9092 --from-beginning
我在一个 kafka 集群中创建了两个 kafka 代理。当一个经纪人倒闭时,我无法向 kafka 消费者获取任何数据。我正在使用此命令来读取来自消费者的消息:
bin/kafka-console-consumer.sh --topic test_kafka_cluster \
--bootstrap-server 127.0.0.1:9092,127.0.0.2:9092 --from-beginning
有两个参数会影响消费者的主题可用性:
min.insync.replicas
(minISR):同步分区的最小副本数。replication.factor
(RF):分区的副本总数。如果您希望您的消费者在代理中断中幸存下来,那么您必须拥有RF > minISR
. RF=2 and minISR=2
你不能容忍任何经纪人宕机,你RF=3 and minISR=2
可以容忍 1 名经纪人宕机,RF=5 and minISR=2
你可以容忍 3 名经纪人宕机,依此类推。
请注意,内部__consumer_offsets
主题用于存储消费者偏移量,并且默认 RF 值为 3,这在 2 个节点的集群中无法实现。所以你还需要offsets.topic.replication.factor=1
在集群级别进行设置。
此处根据您的控制台使用者配置,此处使用的 IP 地址为 127.0.0.1 和 127.0.0.2,两个引导服务器配置为 9092。
验证两个 ip 都可以访问
bin/kafka-console-consumer.sh --topic test_kafka_cluster \
--bootstrap-server 127.0.0.1:9092,127.0.0.2:9092 --from-beginning
理想情况下,当我们运行两个 kafka 代理实例时,它将在两个不同的端口中运行。
假设 Kafka 在本地运行 例如:localhost:9092 localhost:9093
Kafka 实例在两个不同的主机上运行:例如:127.0.0.3:9092、127.0.0.2:9092
如果 Kafka 在 docker/docker 工具箱上运行:
Docker 工具箱上的控制台使用者:
docker exec <container-name> kafka-console-consumer --bootstrap-server 192.168.99.100:9093 --topic <topic-name> --from-beginning
Docker 上的控制台使用者:
docker exec <container-name> kafka-console-consumer --bootstrap-server localhost:9093 localhost 9092 --topic <topic-name> --from-beginning