我希望使用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应该如何正确实现?