【问题标题】:how do i test Exactly Once Semantics working in my kafka streams application我如何在我的 kafka 流应用程序中测试 Exactly Once Semantics
【发布时间】:2024-05-19 04:40:01
【问题描述】:

我有一个 Kafka Streams DSL 应用程序,我们要求只处理一次,因为我已经添加了配置

streamConfig.put(processing.gurantee, "exactly_once");

我正在使用卡夫卡 2.7 我有 2 个查询

  1. exact_once 和exact_once_beta 有什么区别
  2. 如何测试此功能以确保我的消息只被处理一次

谢谢!

【问题讨论】:

    标签: apache-kafka apache-kafka-streams


    【解决方案1】:

    exactly_once_beta 是对exactly_once 的改进。 exactly_once 为每个流任务使用事务生产者(子拓扑和输入分区的组合,exactly_once_beta 为 Kafka Streams 客户端的每个流线程使用事务生产者。 每个生产者都带有单独的内存缓冲区、单独的线程、单独的网络连接,这可能会限制扩展输入分区的数量(即任务数量)。大量生产者也可能导致代理的负载增加。因此,exactly_once_beta 具有更好的缩放特性。您可以在KIP-447找到更多详细信息。

    请注意,exactly_once 将被弃用,exactly_once_beta 将在 Apache Kafka 3.0 中重命名为 exactly_once_v2。详情请见KIP-732

    对于测试,您可以从 Apache Kafka 存储库中的测试中获得灵感:

    基本上,您需要创建故障转移场景并验证消息不会多次生成到输出主题。请注意,消息可能会被处理多次,但输出主题中的结果必须看起来好像只处理了一次。你可以在这里找到一个关于完全一次语义的很好的讨论,它也解释了故障转移场景:https://www.confluent.io/kafka-summit-london18/dont-repeat-yourself-introducing-exactly-once-semantics-in-apache-kafka/

    【讨论】:

      最近更新 更多