【问题标题】:Spring Kafka is Acknowledgement.acknowledge thread safe?Spring Kafka 是 Acknowledgement.acknowledge 线程安全的吗?
【发布时间】:2017-12-05 11:34:55
【问题描述】:

我正在实现一个基于 kafka 的应用程序,我想手动确认传入的消息。建筑迫使我在一个单独的线程中完成它。

问题是:在与消费者不同的线程中执行 Acknowledgement.acknowledge() 是否可能且安全?

【问题讨论】:

    标签: spring apache-kafka spring-kafka


    【解决方案1】:

    是的,只要你使用MANUAL 而不是MANUAL_IMMEDIATE,但我认为你不会得到你所期望的。

    Kafka 不跟踪每条消息,只跟踪分区内的偏移量。

    假设消息 1 到达,您将其移交给另一个线程。然后消息 2 到达,它被移交给另一个线程。

    当消息 2 的偏移量被确认时,您实际上是在确认两条消息。

    【讨论】:

    • 谢谢 Gary,我的情况是只有一个额外的线程来处理结果,所以完全没问题。
    • Acknowledgement.acknowledgeMANUAL ack-mode 中调用方法addOffset。此方法与 HashMap 字段offsets 交互:检查键是否存在,将值放入其中。它怎么可能是线程安全的?
    • 糟糕;你是对的; will fix。欢迎投稿。 (但由于我引用的原因,将 ack 交给另一个线程仍然是不寻常的)。
    猜你喜欢
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 2012-12-18
    • 2011-10-08
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多