简体   繁体   English

Kafka python 优雅关闭消费者

[英]Kafka python graceful shutdown of consumer

I am trying to gracefully shutdown a kafka consumer, but the script blocks with Stopping HeartBeat thread.我正在尝试优雅地关闭 kafka 消费者,但脚本会因 Stopping HeartBeat 线程而阻塞。 How can i gracefully close the consumer on a SIGTERM with kafka-python.如何使用 kafka-python 在 SIGTERM 上优雅地关闭消费者。 This is what i have done这就是我所做的

import logger as logging
import time
import sys
from kafka import KafkaConsumer
import numpy as np
import signal


log = logging.getLogger(__name__)


class Cons:
    def __init__(self):

        signal.signal(signal.SIGINT, self.sigterm_handler)
        signal.signal(signal.SIGTERM, self.sigterm_handler)
        self.consumer = KafkaConsumer('dummy-topic', group_id='poll-test', bootstrap_servers=['b1'])

    def sigterm_handler(self, signum, frame):
        log.info("Sigterm handler")
        self.consumer.close(autocommit=False)
        sys.exit(0)



    def consume(self):
        try:
            while True:
                records = self.consumer.poll(timeout_ms=500, max_records=500)
                for topic_partition, consumer_records in records.items():
                    for record in consumer_records:
                        log.info("Got Record - {}".format(record))
                    #code to manually commit


        except ValueError as e:
            log.exception("exception")


if __name__ == '__main__':
    c=Cons()
    c.consume()

With debug logs enabled, this is the output i get and the code gets blocked on this.启用调试日志后,这是我得到的 output,代码在此被阻止。

^C2020-04-28 07:18:33,050 - MainThread - __main__ - INFO - Sigterm handler
2020-04-28 07:18:33,050 - MainThread - kafka.consumer.group - DEBUG - Closing the KafkaConsumer.
2020-04-28 07:18:33,051 - MainThread - kafka.coordinator - INFO - Stopping heartbeat thread

What is the reason behind this?这背后的原因是什么? and what is right way to close a consumer on SIGTERM or SIGINT?在 SIGTERM 或 SIGINT 上关闭消费者的正确方法是什么?

It looks like this ultimately got fixed in 2020, so any recent version should be OK:看起来这最终在 2020 年得到了修复,所以任何最新版本都应该没问题:

https://github.com/dpkp/kafka-python/commit/91daea329bb40ed80bddef4635770d24b670b0c6 https://github.com/dpkp/kafka-python/commit/91daea329bb40ed80bddef4635770d24b670b0c6

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM