【问题标题】:How to guarantee message order when multiple instances update elasticsearch?多个实例更新elasticsearch时如何保证消息顺序?
【发布时间】:2018-08-14 09:15:18
【问题描述】:

假设我有一个队列正在监听包含实时消息的 Kafka

我还有一个“工作者”,它从队列中获取消息并在Elasticsearch 上执行更新。当我通过添加更多“worker”实例来扩展我的项目时,我如何保持消息的顺序?

我怎样才能避免一个“工作”实例从队列中获取后面的消息,但更早完成对Elasticsearch 的更新?

【问题讨论】:

  • 利用 Kafka 分区并确保相关消息进入同一个分区,因为只有一个工作人员可以处理一个分区。
  • 但是我所有的消息都进入了队列。 “工人”听队列,而不是卡夫卡。队列就像是 kafka 和 Elasticsearch 之间的中间缓冲区
  • 已经有了Kafka,为什么还要排队?
  • 我的错。在 Kafka 和“我的队列”之间,我有一个,可以说是“过滤器”。 “过滤器”的目的是在进行实际计算之前消除不需要的消息。

标签: python multithreading elasticsearch design-patterns apache-kafka


【解决方案1】:

这是您必须在并行处理和排序之间做出的选择。

主题必须有单个分区才能维护数据的顺序。所以你在 worker 中最多可以有 1 个任务,额外的任务将被取消分配。

【讨论】:

    猜你喜欢
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 2020-03-04
    • 2023-02-20
    • 2012-11-14
    • 1970-01-01
    相关资源
    最近更新 更多