Apache kafka 如何在kafka streams应用程序中测试一次语义

Apache kafka 如何在kafka streams应用程序中测试一次语义,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我有一个Kafka Streams DSL应用程序,我们要求只处理一次,同样,我添加了配置 streamConfig.put(processing.gurantee, "exactly_once"); 我用的是卡夫卡2.7 我有两个问题 到底一次和一次测试有什么区别 如何测试此功能以确保我的邮件只处理一次 谢谢 精确一次测试版是对精确一次的改进。虽然justice\u once为每个流任务(子拓扑和输入分区的组合)使用事务生成器,但justice\u once\u beta

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

streamConfig.put(processing.gurantee, "exactly_once");
我用的是卡夫卡2.7 我有两个问题

  • 到底一次和一次测试有什么区别
  • 如何测试此功能以确保我的邮件只处理一次

  • 谢谢

    精确一次测试版
    是对
    精确一次
    的改进。虽然
    justice\u once
    为每个流任务(子拓扑和输入分区的组合)使用事务生成器,但
    justice\u once\u beta
    为Kafka Streams客户端的每个流线程使用事务生成器。 每个生产者都有单独的内存缓冲区、单独的线程和单独的网络连接,这可能会限制输入分区的数量(即任务数量)。大量生产商也可能会给代理带来更大的负载。因此,
    精确地\u once\u beta
    具有更好的缩放特性。您可以在中找到更多详细信息

    请注意,在Apache Kafka 3.0中,
    justice\u once
    将被弃用,而
    justice\u once\u beta
    将被重命名为
    justice\u once\u v2
    。有关更多详细信息,请参阅

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

    基本上,您需要创建一个故障切换场景,并验证消息没有多次生成到输出主题。请注意,消息可能会被处理多次,但输出主题中的结果必须显示为仅处理一次。您可以找到一个非常好的关于“仅处理一次”语义的讨论,这也解释了以下是故障转移场景: