有时新的消费者群体不起作用

时间:2018-03-16 11:37:22

标签: apache-kafka confluent-kafka

我曾经在生产中见过这个(我不记得我们是如何解决它的)现在我可以在集成测试中重复它,它总是从一个全新的Kafka安装开始。这是怎么回事:

步骤1:尚不存在的群组的使用者订阅了尚不存在的主题并开始轮询。

self.kafka_consumer = confluent_kafka.Consumer({
    'group.id': 'mygroup',
    'bootstrap.servers': 'kafka:9092',
    'enable.auto.commit': False,
    'auto.offset.reset': 'earliest',
})
self.kafka_consumer.subscribe('mytopic')

第2步:制作人向主题撰写邮件。

结果:

  • 大约一半时间它工作正常;消费者阅读信息就好了。
  • 另一半消费者似乎陷入困境。我已经尝试了等待时间长达10分钟,看看它是否会脱落,但没有。
  • 即使这两个步骤相反,即消费者试图订阅已经存在消息的已存在主题,但行为是相同的(但该组始终是新的)。

更多详情

消费者使用2秒的超时进行轮询,如果没有结果,则会循环。

虽然该主题不存在,但poll()会返回None。主题存在后,poll()会返回msgerror().code()的{​​{1}}。

虽然消费者似乎陷入困境,但我问kafka _PARTITION_EOF发生了什么,这就是它告诉我的:

mygroup

我试图通过尝试将另一个不存在的主题读作root@e7b124b4039c:/# /usr/local/kafka/bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group mygroup --describe Note: This will not show information about old Zookeeper-based consumers. TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID root@e7b124b4039c:/# 来解决它:

mygroup

在我这样做之后,这就是卡夫卡对root@e7b124b4039c:/# /usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --group mygroup --topic nonexistent --from-beginning [2018-03-15 16:36:59,369] WARN [Consumer clientId=consumer-1, groupId=pixelprocessor] Error while fetching metadata with correlation id 2 : {nonexistent=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient) ^CProcessed a total of 0 messages root@e7b124b4039c:/# 所说的话:

mygroup

这是Kafka 1.0.1,librdkafka 0.11.3,confluent_kafka 0.11.0,在Ubuntu 16.04 dockers(带有操作系统的打包动物园管理员3.4.8)上,它们运行在带有Linux 4.9.0的Debian版本(9.4)上6- AMD64。

1 个答案:

答案 0 :(得分:1)

问题似乎出现在Consumer()个论点中。这不能正常工作:

self.kafka_consumer = confluent_kafka.Consumer({
    'group.id': 'mygroup',
    'bootstrap.servers': 'kafka:9092',
    'auto.offset.reset': 'earliest',
})

但这样做:

self.kafka_consumer = confluent_kafka.Consumer({
    'group.id': 'mygroup',
    'bootstrap.servers': 'kafka:9092',
    'default.topic.config': {
        'auto.offset.reset': 'earliest',
    },
})