我曾经在生产中见过这个(我不记得我们是如何解决它的)现在我可以在集成测试中重复它,它总是从一个全新的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步:制作人向主题撰写邮件。
结果:
更多详情
消费者使用2秒的超时进行轮询,如果没有结果,则会循环。
虽然该主题不存在,但poll()
会返回None
。主题存在后,poll()
会返回msg
为error().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。
答案 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',
},
})