【发布时间】:2018-12-24 14:44:39
【问题描述】:
我想用 Kafka 来“分工”。我想将工作实例发布到一个主题,并运行一组相同的消费者来处理它们。随着每个消费者完成其工作,它将从主题中提取下一个工作。每件作品只能由一个消费者处理一次。处理工作很昂贵,所以我需要很多消费者在很多机器上运行才能跟上。我希望消费者的数量根据需要增加和减少(我计划为此使用 Kubernetes)。
我发现了一种为每个消费者创建唯一分区的模式。这“分工”,但分区的数量是在创建主题时设置的。此外,主题必须在命令行上创建,例如
bin/kafka-topics.sh --zookeeper localhost:2181 --partitions 3 --topic divide-topic --create --replication-factor 1
...
for n in range(0,3):
consumer = KafkaConsumer(
bootstrap_servers=['localhost:9092'])
partition = TopicPartition('divide-topic',n)
consumer.assign([partition])
...
我可以为每个消费者创建一个独特的主题,并编写自己的代码来为这些主题分配工作。这看起来很恶心,我仍然必须通过命令行创建主题。
具有动态数量的并行消费者的工作队列是一种常见的架构。我不能成为第一个需要这个的人。使用 Kafka 的正确方法是什么?
【问题讨论】:
标签: parallel-processing apache-kafka kubernetes queue