我想用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 的正确方法是什么?
您发现的模式是准确的。请注意,也可以使用以下命令创建主题卡夫卡管理 API http://kafka.apache.org/11/javadoc/org/apache/kafka/clients/admin/AdminClient.html#createTopics-java.util.Collection- and 还可以添加分区 http://kafka.apache.org/documentation/#basic_ops_modify_topic创建主题后(有一些陷阱)。
在 Kafka 中,划分工作和允许扩展的方法是使用分区 http://kafka.apache.org/documentation/#kafka_mq。这是因为在消费者组中,每个分区在任何时候都被单个消费者消费。
例如,您可以有一个具有 50 个分区的主题和一个订阅该主题的消费者组:
在这种情况下,50 个消费者是扩展的极限。消费者公开了许多指标(例如延迟),让您可以随时决定是否有足够的指标
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)