【发布时间】:2021-05-04 09:45:19
【问题描述】:
我有一个topics_subscriber.py,它会不断检查任何新主题并订阅它们。
def _subscribe_topics(consumer: KafkaConsumer) -> None:
topics_to_subscribe = {
topic
for topic in consumer.topics()
if topic.startswith("topic-")
}
subscribed_topics = consumer.subscription()
print(subscribed_topics)
new_topics = (
topics_to_subscribe - subscribed_topics
if subscribed_topics
else topics_to_subscribe
)
if new_topics:
print("new topics detected:")
for topic in new_topics:
print(topic)
print("\nsubscribing to old+new topics\n")
consumer.subscribe(topics=list(topics_to_subscribe)) // subscribe() is not incremental, hence subscribing to old+new topics
print(consumer.subscription())
else:
print("\nno new topics detected: exiting normally\n")
def main() -> None:
consumer = kafka.KafkaConsumer(
client_id="client_1",
group_id="my_group",
bootstrap_servers=['localhost:9092']
)
while True:
_subscribe_topics(consumer)
print("\nsleeping 10 sec\n")
time.sleep(10)
现在,在另一个脚本kafka_extractor.py 中,我想创建一个新的消费者并加入my_group 消费者组,并开始使用该组订阅的主题中的消息。即没有专门为这个新消费者订阅主题。
def main() -> None:
consumer = kafka.KafkaConsumer(
client_id="client_2",
group_id="my_group",
bootstrap_servers=['localhost:9092']
)
print("created consumer")
print(consumer.subscription())
for msg in consumer:
print(msg.topic)
kafka_extractor.py 的输出中需要注意两点:
-
print(consumer.subscription())输出为无 -
for msg in consumer:-> 卡住了,不前进也不退出程序。
任何方向都会在这里受到赞赏。
【问题讨论】:
标签: python apache-kafka kafka-consumer-api subscribe kafka-python