【问题标题】:How to get Acknowledgement from Kafka如何获得 Kafka 的确认
【发布时间】:2013-07-31 14:12:36
【问题描述】:

一旦消息被消费或处理,我如何准确地从 Kafka 获得确认。听起来可能很愚蠢,但是有没有办法知道已收到 ack 的消息的开始和结束偏移量?

【问题讨论】:

    标签: apache-kafka real-time-data


    【解决方案1】:

    Kafka 并没有真正做到这一点。要了解原因,请查看设计文档here

    为了提供一次性确认,您需要为您的应用程序创建一些外部跟踪系统,在其中明确编写确认并在事务 ID 上实施锁定,以确保事情只处理一次。实施此类系统的计算成本非常高,这也是大型事务系统需要相对奇特的硬件并且可扩展性低于 Kafka 等系统的主要原因之一。

    如果您不需要强大的持久性语义,您可以使用组 API 来粗略跟踪读取最后一条消息的时间。这可确保每条消息至少被读取一次。请注意,由于组 API 不为您提供显式跟踪应用程序自己的处理逻辑的能力,因此在这种情况下,您的实际处理保证相当薄弱。依赖幂等处理的方案在这种环境中很常见。

    或者,您可以使用名称不佳的 SimpleConsumer API(使用起来非常复杂),它使您能够显式跟踪应用程序中的时间戳。这是可以通过本机 Kafka API 实现的最高级别的处理保证,因为它使您能够跟踪应用程序自己对从队列中读取的数据的处理。

    【讨论】:

      【解决方案2】:

      到目前为止,我发现在 0.8 中,他们引入了以下方式来从偏移量中进行选择以进行读取..

      kafka.api.OffsetRequest.EarliestTime() 在日志中找到数据的开头并从那里开始流式传输,kafka.api.OffsetRequest.LatestTime() 只会流式传输新消息。

      示例代码 https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+SimpleConsumer+Example

      仍然不确定致谢部分

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-23
        • 2016-03-09
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多