我试图在python中开发一个包含一个主题(演示-主题)和一个分区的应用程序。在这个主题中,消息是随机推送的,我有一个使用者(consumer1) (演示组),它使用这些消息进行一些背景计算(这需要一些时间)。
在amazon上使用这个应用程序,我希望能够按新创建的机器将同一组(演示-组)中的另一个使用者(使用者2)在同一个主题(演示-主题)中读取的方式来扩展它(当计算耗时很长时),但以他们开始拆分负载的方式(消费者1需要一些负载,而消费者2接受其余的,但他们从来没有得到相同的消息)。
在数据激增停止后,第二台机器被停用,消费者1再次承担所有负载。
这是否可以执行(不需要在提交更多分区之前添加)。有解决办法吗??
谢谢
发布于 2017-10-18 14:36:20
不能让同一组中的多个使用者同时从同一分区消费。如果您订阅同一组中的第二次消费到同一个分区,它将充当热备用,在第一个分区停止之前不会使用任何消息。
最好的解决方案是向主题中添加分区。这样,当你看到流量激增的时候,你就可以加入消费者,当流量变慢的时候,你可以删除他们。卡夫卡会为你做所有的负载平衡。
发布于 2017-10-18 14:38:29
你可以这么做,但不应该。
Kafka中并行性的基本单位是分区:在一个使用者组中,每个使用者从一个或多个分区中读取,并且使用者不共享分区。为了共享分区,您需要使用像ZooKeeper这样的工具来锁定对分区的访问(并跟踪每个用户的位置)。
您所描述的用例更好地由SQS和自动缩放组提供。
https://stackoverflow.com/questions/46812351
复制相似问题