如果第一个经纪人停职,卡夫卡消费者就无法消费

时间:2018-01-09 11:40:50

标签: apache-kafka failover consumer

我使用的是最新版本的kafka(kafka_2.12-1.0.0.tgz)。我已经设置了包含3个代理的简单集群(在每个实例的属性文件中只更改了broker.id = 1和listeners = PLAINTEXT://:9092)。在集群启动后,我使用以下命令创建了主题

./kafka-topics.sh --create    --zookeeper localhost:2181  --replication-factor 3     --partitions 13    --topic demo

然后使用以下命令启动kafka使用者和生产者

./kafka-console-producer.sh --topic  demo  --broker-list localhost:9094,localhost:9093,localhost:9092

./kafka-console-consumer.sh --group test --bootstrap-server localhost:9094,localhost:9093,localhost:9092  --topic demo

当所有经纪人都出现时,一切都很好。但是,如果我先杀死(通过启动顺序),经纪人消息将被发送给经纪人,但消费者无法接收任何消息。消息不会丢失。启动后,该代理消费者立即收到消息。

关闭代理实例后的消费者日志:

  

[2018-01-09 13:39:31,130] WARN [消费者clientId =消费者-1,   groupId = test]无法建立与节点2147483646的连接。   经纪人可能无法使用。 (org.apache.kafka.clients.NetworkClient)   [2018-01-09 13:39:31,132]警告[消费者clientId =消费者-1,   groupId = test]无法建立与节点1的连接。经纪人   可能无法使用。 (org.apache.kafka.clients.NetworkClient)   [2018-01-09 13:39:31,344]警告[消费者clientId =消费者-1,   groupId = test]无法建立与节点2147483646的连接。   经纪人可能无法使用。 (org.apache.kafka.clients.NetworkClient)   [2018-01-09 13:39:31,451]警告[消费者clientId =消费者-1,   groupId = test]无法建立与节点1的连接。经纪人   可能无法使用。 (org.apache.kafka.clients.NetworkClient)   [2018-01-09 13:39:31,848]警告[消费者clientId =消费者-1,   groupId = test]无法建立与节点2147483646的连接。   经纪人可能无法使用。 (org.apache.kafka.clients.NetworkClient)   [2018-01-09 13:39:31,950]警告[消费者clientId =消费者-1,   groupId = test]无法建立与节点1的连接。经纪人   可能无法使用。 (org.apache.kafka.clients.NetworkClient)   [2018-01-09 13:39:32,363]警告[消费者clientId =消费者-1,   groupId = test]无法建立与节点2147483646的连接。   经纪人可能无法使用。 (org.apache.kafka.clients.NetworkClient)   [2018-01-09 13:39:33,092]警告[消费者clientId =消费者-1,   groupId = test]无法建立与节点2147483646的连接。   经纪人可能无法使用。 (org.apache.kafka.clients.NetworkClient)   [2018-01-09 13:39:34,216]警告[消费者clientId =消费者-1,   groupId = test]无法建立与节点2147483646的连接。   经纪人可能无法使用。 (org.apache.kafka.clients.NetworkClient)   [2018-01-09 13:39:34,218]警告[消费者clientId =消费者-1,   groupId = test]偏移的异步自动提交   {demo-0 = OffsetAndMetadata {offset = 3,metadata =''},   demo-1 = OffsetAndMetadata {offset = 3,metadata =''},   demo-2 = OffsetAndMetadata {offset = 2,metadata =''},   demo-3 = OffsetAndMetadata {offset = 2,metadata =''},   demo-4 = OffsetAndMetadata {offset = 1,metadata =''},   demo-5 = OffsetAndMetadata {offset = 1,metadata =''},   demo-6 = OffsetAndMetadata {offset = 3,metadata =''},   demo-7 = OffsetAndMetadata {offset = 2,metadata =''},   demo-8 = OffsetAndMetadata {offset = 3,metadata =''},   demo-9 = OffsetAndMetadata {offset = 2,metadata =''},   demo-10 = OffsetAndMetadata {offset = 3,metadata =''},   demo-11 = OffsetAndMetadata {offset = 2,metadata =''},   demo-12 = OffsetAndMetadata {offset = 2,metadata =''}}失败:偏移   提交因可恢复异常而失败。你应该重试提交   偏移。潜在的错误是:协调员不可用。   (org.apache.kafka.clients.consumer.internals.ConsumerCoordinator)   [2018-01-09 13:39:34,219]警告[消费者clientId =消费者-1,   groupId = test]无法建立与节点1的连接。经纪人   可能无法使用。 (org.apache.kafka.clients.NetworkClient)

再次启动遗失经纪人后记录消费者:

  

[2018-01-09 13:41:21,739]错误[消费者clientId =消费者-1,   groupId = test]在偏移量为3的分区demo-0上的偏移提交失败:   这不是正确的协调员。   (org.apache.kafka.clients.consumer.internals.ConsumerCoordinator)   [2018-01-09 13:41:21,739]警告[消费者clientId =消费者-1,   groupId = test]偏移的异步自动提交   {demo-0 = OffsetAndMetadata {offset = 3,metadata =''},   demo-1 = OffsetAndMetadata {offset = 3,metadata =''},   demo-2 = OffsetAndMetadata {offset = 2,metadata =''},   demo-3 = OffsetAndMetadata {offset = 2,metadata =''},   demo-4 = OffsetAndMetadata {offset = 1,metadata =''},   demo-5 = OffsetAndMetadata {offset = 1,metadata =''},   demo-6 = OffsetAndMetadata {offset = 3,metadata =''},   demo-7 = OffsetAndMetadata {offset = 2,metadata =''},   demo-8 = OffsetAndMetadata {offset = 3,metadata =''},   demo-9 = OffsetAndMetadata {offset = 2,metadata =''},   demo-10 = OffsetAndMetadata {offset = 3,metadata =''},   demo-11 = OffsetAndMetadata {offset = 2,metadata =''},   demo-12 = OffsetAndMetadata {offset = 2,metadata =''}}失败:偏移   提交因可恢复异常而失败。你应该重试提交   偏移。潜在的错误是:这不正确   协调。   (org.apache.kafka.clients.consumer.internals.ConsumerCoordinator)   [2018-01-09 13:41:22,353]错误[消费者clientId =消费者-1,   groupId = test]在偏移量为3的分区demo-0上的偏移提交失败:   这不是正确的协调员。   (org.apache.kafka.clients.consumer.internals.ConsumerCoordinator)   [2018-01-09 13:41:22,354]警告[消费者clientId =消费者-1,   groupId = test]偏移的异步自动提交   {demo-0 = OffsetAndMetadata {offset = 3,metadata =''},   demo-1 = OffsetAndMetadata {offset = 3,metadata =''},   demo-2 = OffsetAndMetadata {offset = 2,metadata =''},   demo-3 = OffsetAndMetadata {offset = 2,metadata =''},   demo-4 = OffsetAndMetadata {offset = 1,metadata =''},   demo-5 = OffsetAndMetadata {offset = 1,metadata =''},   demo-6 = OffsetAndMetadata {offset = 3,metadata =''},   demo-7 = OffsetAndMetadata {offset = 2,metadata =''},   demo-8 = OffsetAndMetadata {offset = 3,metadata =''},   demo-9 = OffsetAndMetadata {offset = 2,metadata =''},   demo-10 = OffsetAndMetadata {offset = 3,metadata =''},   demo-11 = OffsetAndMetadata {offset = 3,metadata =''},   demo-12 = OffsetAndMetadata {offset = 2,metadata =''}}失败:偏移   提交因可恢复异常而失败。你应该重试提交   偏移。潜在的错误是:这不正确   协调。   (org.apache.kafka.clients.consumer.internals.ConsumerCoordinator)

由于

2 个答案:

答案 0 :(得分:4)

尝试检查" offsets.topic.replication.factor"在服务器 - *。属性文件

例如:

############################# Internal Topic Settings       
# The replication factor for the group metadata internal topics    
# For anything other than development testing, a value greater than 1 is  recommended for to ensure availability such as 3.
offsets.topic.replication.factor=3

http://kafka.apache.org/documentation/#brokerconfigs

答案 1 :(得分:0)

KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR文件上使用yml解决了此问题。

例如在docker-swarm上使用2个工作线程。

environment:
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2