0

我在一个 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
4

2 回答 2

0

有两个参数会影响消费者的主题可用性:

  • 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在集群级别进行设置。

于 2021-01-22T07:42:41.190 回答
0

此处根据您的控制台使用者配置,此处使用的 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
于 2021-01-23T20:00:32.733 回答