Apache kafka 卡夫卡分区内容重新分发

Apache kafka 卡夫卡分区内容重新分发,apache-kafka,Apache Kafka,如果您有多个分区/使用者,并且其中一个远远落后(例如,在中毒事件上停留了一段时间)从而允许队列建立,那么是否有一个已建立的模式用于重新分发排队事件(同时遵守序列化密钥的顺序) 其目的是将工作从带有队列的分区/使用者重新分配到其他可能耗尽的/空闲的分区/使用者。我认为答案是简单的否定。如果您有有害消息,最好的方法是将其转移到另一个主题(死信)并继续使用。这种方法比将消息重新分发到另一个分区要简单得多(如果我正确理解了您的问题) Kafka保证给定分区的事件顺序。将消息移动到另一个分区将破坏这一保证

如果您有多个分区/使用者,并且其中一个远远落后(例如,在中毒事件上停留了一段时间)从而允许队列建立,那么是否有一个已建立的模式用于重新分发排队事件(同时遵守序列化密钥的顺序)


其目的是将工作从带有队列的分区/使用者重新分配到其他可能耗尽的/空闲的分区/使用者。

我认为答案是简单的否定。如果您有有害消息,最好的方法是将其转移到另一个主题(死信)并继续使用。这种方法比将消息重新分发到另一个分区要简单得多(如果我正确理解了您的问题)

Kafka保证给定分区的事件顺序。将消息移动到另一个分区将破坏这一保证

建议:分享你试图解决的问题,而不是潜在的解决方案。卡夫卡的世界至少可以说是卡夫卡式的,正确的解决方案通常并不简单

编辑 我刚读了你的评论/更新。我觉得卡夫卡可能不是合适的工具。我想多了解一点,因为你提到了两件自相矛盾的事情:(1)订购,但(2)乐意将信息传递给其他消费者,以便他们尽快完成(这会中断订购)。通常,订购的需求不是真实的,或者很容易找到一个不需要订购的解决方案

在我看来,一个普通的队列会做你想做的事情(选择你的毒药:SQS、ActiveMQ、RabbitMQ…)


让我知道这是否有帮助

潜在的问题如下:处理每个事件所做的工作非常不均匀(数量级变化,非高斯),无法根据卡夫卡消息进行预测,因此尽管卡夫卡保证按事件计数排序(这是必需的)和均匀分布,但当峰值负荷过后,从统计上看,我们的最终结果是一个消费者排队,而其他消费者则无所事事。总体目标是尽早完成所有事件的处理。嗨,格雷格,我已经更新了我的答案。如果有帮助,请告诉我!谢谢,那很有帮助。增加了必要的说明。排序是必要的,但适用于事件流的子集,即它们可能以小的相关集合出现,在数百万个事件中,您需要这些2到10个事件的子集保持相同的顺序。因此,如果Kafka解决了排序问题,那么这种性能异构性意味着需要覆盖其他内容来实现硬件间的负载平衡。