首页 文章

我可以在Kafka中与多个消费者实现订购处理吗?

提问于
浏览
0

在 Kafka ,我有一个 生产环境 者排队客户的工作 . 每件作品都有一个客户ID . 可以不按时处理不同客户的工作,但必须按顺序处理一个客户的工作 .

为此,我打算(例如)有20个主题来实现并行性 . 生产环境 者将客户ID的工作排队到 topic[client ID mod 20] . 然后,我打算让许多消费者都能够处理任何客户的工作,但我仍然希望按顺序处理工作 . 这意味着该主题的下一个工作价格可以两次处理工作,但这意味着该主题的偏移量无法进入下一个工作 .

注意:每秒的消息数量相当小(10s-100s消息) .

总结一下:

  • 'At least once'处理每条消息(=工作)

  • 为了处理一个主题的工作

  • 每个主题的多个消费者,以支持消费者失败

这可以用Kafka完成吗?

1 回答

  • 1

    是的,你可以用Kafka做到这一点 . 但你不应该像你所描述的那样去做 . 如果您为每条消息提供密钥,Kafka已经支持主题中的语义分区 . 在这种情况下,您将创建一个包含20个分区的主题,然后为每个消息创建客户端ID的密钥 . 这可以保证具有相同密钥的所有消息最终都在同一个分区中,即它将执行您手动执行的分区 .

    消费时,使用高级消费者,它可以自动 balancer 可用消费者之间的分区 . 如果您想绝对保证至少一次处理,则应手动提交偏移量,并确保在提交之前已经消耗了完整处理过的消息 . 请注意,加入或离开组的消费者将导致跨实例的分区重新 balancer ,并且您必须确保正确处理(例如,如果您的处理是有状态的,您将必须确保状态可以在两者之间移动重新 balancer 的消费者) .

相关问题