Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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中保持Kafka消费者活力的最佳实践是什么?_Python_Python 3.x_Apache Kafka_Kafka Consumer Api - Fatal编程技术网

在python中保持Kafka消费者活力的最佳实践是什么?

在python中保持Kafka消费者活力的最佳实践是什么?,python,python-3.x,apache-kafka,kafka-consumer-api,Python,Python 3.x,Apache Kafka,Kafka Consumer Api,在让消费者生存的问题上,有些事情让我感到困惑。假设我有一个主题,数据不断地被写入其中。但是,在一天中的一个小时内,没有新的消息。如果我为我的消费者设置了超时,当没有新消息时,消费者将关闭 现在,新的信息出现了。但是,没有活着的消费者来消费它们 我应该如何处理这种情况?我的消费者可能会消费所有邮件并关闭。让他们活着的最好方法是什么?有没有办法在新消息到达时自动调用它们?这些场景的最佳实践是什么?为什么不 import time from confluent_kafka import Consume

在让消费者生存的问题上,有些事情让我感到困惑。假设我有一个主题,数据不断地被写入其中。但是,在一天中的一个小时内,没有新的消息。如果我为我的消费者设置了超时,当没有新消息时,消费者将关闭

现在,新的信息出现了。但是,没有活着的消费者来消费它们

我应该如何处理这种情况?我的消费者可能会消费所有邮件并关闭。让他们活着的最好方法是什么?有没有办法在新消息到达时自动调用它们?这些场景的最佳实践是什么?

为什么不

import time
from confluent_kafka import Consumer


consumer = Consumer({
    'bootstrap.servers': 'localhost:9092',
    'group.id': 'my-consumer-1',
    'auto.offset.reset': 'earliest'
})
consumer.subscribe(['topicName'])

while True:
    try: 
        message = consumer.poll(10.0)

        if not message:
            time.sleep(120) # Sleep for 2 minutes

        if message.error():
            print(f"Consumer error: {message.error()}")
            continue

        print(f"Received message: {msg.value().decode('utf-8')}")
    except:
        # Handle any exception here
        ...
    finally:
        consumer.close()
        print("Goodbye")


我无法对“为消费者设置超时”的要求发表评论,但在大多数情况下,消费者应该“永远”运行,并且还应该以一种高度可用的方式添加到消费者群体中。

确切地说,我希望它永远运行。那么为什么我的消费代码中会有consumer.close()?在发生故障时更快地触发再平衡?在守护程序模式下运行使用者有什么最佳实践吗?在上面@Giorgos Myrianthous编写的示例代码中,除非发生异常或崩溃,否则使用者将永远运行,并且不会到达consumer.close()。这正是你想要实现的。