我正在使用Kafka(kafka-python
)3.0.0-1.3.0.0.p0.40版本。我需要为Python中的主题“模拟”配置使用者。当我不指明group_id时,即group_id = None,它会收到很好的消息。但是,如果我指示group_id,则它不会收到任何消息。
这是我在Python中的代码:
consumer = KafkaConsumer(bootstrap_servers='XXX.XXX.XXX.XXX:9092',
group_id = 'myTestGroupID', enable_auto_commit = True)
consumer.subscribe(['simulation'])
# not using assign method here as auto_commit is enabled
# partitions = [TopicPartition('simulation',num) for num in range(0,9)]
# consumer.assign([TopicPartition('simulation', partitions[0])])
while not self.stop_event.is_set():
for message in consumer:
print(message)
我试图在使用者属性文件中搜索group_id的一些默认值,但我发现了一个cloudera_mirrormaker,但是没有任何改变。 我将需要使用多个使用者,因此,有一个group_id并且他们共享相同的group_id非常重要。 在许多资料中,我发现group_id可以是任何字符串...
当我在控制台中运行此主题的使用者时,它会工作并接收消息
./kafka-console-consumer.sh --bootstrap-server XXX.XXX.XXX.XXX:9092 --topic simulation --from-beginning --consumer-property group.id=myTestGroupID --partition 0
当我运行kafka-consumer-groups.sh列出所有可用组时,它为空。
如果有人知道为什么将其卡在Python中,将不胜感激。 非常感谢
这里是生产者的代码(为简化起见,我将其简化了,因为在这种情况下它不会改变问题)
from kafka import KafkaProducer
class Producer(threading.Thread):
...
def run(self):
producer = KafkaProducer(bootstrap_servers='XXX.XXX.XXX.XXX:9092')
while not self.stop_event.is_set():
string = 'test %s' %time.time()
producer.send('simulation', string.encode())
time.sleep(0.5)
producer.close()
答案 0 :(得分:0)
问题:Kafka在显示group_id时未收到消息
请尝试在实例化的
KafkaConsumer
上传递“主题”,就像在Documentation中那样:# join a consumer group for dynamic partition assignment and offset commits from kafka import KafkaConsumer consumer = KafkaConsumer('simulation', group_id='myTestGroupID') for msg in consumer: print (msg)
Documentation: KafkaConsumer对于
group-id
的类型很清楚:group_id (str或无)–要加入以进行动态分区分配(如果启用)并用于获取和提交偏移量的使用者组的名称。如果为None,则禁用自动分区分配(通过组协调器)和偏移量提交。默认值:无
答案 1 :(得分:0)
我遇到了同样的问题,在处理高延迟环境和大消息(> 1Mb)时,部分接收不到消息(大部分消息丢失)。
我并没有付出太多努力来寻找根本原因,但我猜想是在消息处理完成之前启动了消费者重新平衡,这似乎在没有其他消费者可用时会引起问题(在我的情况下,有一个或两个遇到相同问题的消费者。
对我来说,诀窍是增加 max_poll_interval_ms 并设置 max_poll_records = 1
consumer = KafkaConsumer(bootstrap_servers='XXX.XXX.XXX.XXX:9092',
group_id = 'myTestGroupID',
enable_auto_commit = True,
max_poll_interval_ms=5000,
max_poll_records=1)
您可以在以下位置找到更多信息: https://kafka.apache.org/23/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html 在检测消费者失败部分。