Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有时一个新的消费群体不起作用_Python_Apache Kafka_Confluent Platform - Fatal编程技术网

Python 有时一个新的消费群体不起作用

Python 有时一个新的消费群体不起作用,python,apache-kafka,confluent-platform,Python,Apache Kafka,Confluent Platform,我曾经在生产中见过这一点(我不记得我们是如何解决的),现在我可以在集成测试中重复这一点,集成测试总是从全新的卡夫卡安装开始。事情是这样的: 步骤1:尚未存在的组的消费者订阅尚未存在的主题并开始轮询 self.kafka\u consumer=融合的kafka.consumer({ 'group.id':'mygroup', 'bootstrap.servers':'kafka:9092', “enable.auto.commit”:False, “auto.offset.reset”:“最早的”

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

步骤1:尚未存在的组的消费者订阅尚未存在的主题并开始轮询

self.kafka\u consumer=融合的kafka.consumer({
'group.id':'mygroup',
'bootstrap.servers':'kafka:9092',
“enable.auto.commit”:False,
“auto.offset.reset”:“最早的”,
})
self.kafka_consumer.subscribe('mytopic')
第2步:制作人向主题发送消息

结果:

  • 大约有一半的时间它工作正常;消费者正确阅读信息
  • 另一半时间,消费者似乎陷入困境。我试过等待10分钟,看看它是否会松开,但没有
  • 即使这两个步骤是相反的,即消费者尝试订阅已经存在的主题,并且该主题已经包含消息,行为也是相同的(但是该组始终是新的)
更多详细信息

消费者以2秒的超时时间进行轮询,如果没有结果,它将循环

当主题不存在时,
poll()
返回
None
。主题存在后,
poll()
返回一个
msg
,它的
error().code()
\u-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:/#
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
mytopic                        0          -               1               -          rdkafka-a172d013-08e6-4ee2-92f3-fdb07d163d57      /172.20.0.6                    rdkafka
(another topic)                0          -               0               -          rdkafka-a172d013-08e6-4ee2-92f3-fdb07d163d57      /172.20.0.6                    rdkafka
(a third topic)                0          -               0               -          rdkafka-a172d013-08e6-4ee2-92f3-fdb07d163d57      /172.20.0.6                    rdkafka
nonexistent                    0          0               0               0          -                                                 -                              -
在我这么做之后,以下是卡夫卡对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:/#
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
mytopic                        0          -               1               -          rdkafka-a172d013-08e6-4ee2-92f3-fdb07d163d57      /172.20.0.6                    rdkafka
(another topic)                0          -               0               -          rdkafka-a172d013-08e6-4ee2-92f3-fdb07d163d57      /172.20.0.6                    rdkafka
(a third topic)                0          -               0               -          rdkafka-a172d013-08e6-4ee2-92f3-fdb07d163d57      /172.20.0.6                    rdkafka
nonexistent                    0          0               0               0          -                                                 -                              -

这是Kafka 1.0.1,librdkafka 0.11.3,confluent_Kafka 0.11.0,位于Ubuntu16.04 dockers(带有操作系统打包的zookeeper 3.4.8)上,在Debian stretch(9.4)上运行,Linux 4.9.0-6-amd64。

问题似乎出在
Consumer()
参数中。这无法正常工作:

self.kafka\u consumer=融合的kafka.consumer({
'group.id':'mygroup',
'bootstrap.servers':'kafka:9092',
“auto.offset.reset”:“最早的”,
})
但这确实:

self.kafka\u consumer=融合的kafka.consumer({
'group.id':'mygroup',
'bootstrap.servers':'kafka:9092',
'default.topic.config':{
“auto.offset.reset”:“最早的”,
},
})

Re consumer lag:librdkafka(当前)只会提交它所看到的消息的偏移量,而不会在它到达分区(partition_EOF)末尾时提交偏移量,而不会消耗至少一条消息。这就是为什么消费者组中没有显示任何信息。如果你在第一次运行后重新启动消费者,它会在第二次运行时收到信息吗?@Edenhill AFAICS no。我已经重新启动了五次,并等待了(从几秒钟到几分钟);什么都没有发生。与此同时,一个似乎有效的解决方法是:在开始真正的消费者流程之前,集成测试创建(使用
kafka python
)一个属于(但不存在)真正消费者组的消费者,短暂轮询(但不存在)主题,然后关闭。在这之后,真正的消费者流程就开始了,并且一直有效。