我们可以使用 Spring kafka 进行一次处理吗?

Can we have exactly-once-processing with Spring kafka?

我正在尝试使用 Kafka Consumer 的 exactly-once 消费。
我的要求是:

  1. 从主题读取数据
  2. 处理数据[涉及调用另一个API]
  3. 将响应写回 Kafka

我想知道这种情况下exactly once是否可行?

我知道用例满足 Kafka 流 API,但我想从 Producer/Consumer API 中知道?另外,如果说在处理数据后,消费者由于某种原因失败(处理应该只进行一次),处理这种情况的最佳方法是什么?这种情况能有continuation/checkpoint吗?

我知道 Kafka Streams API 是生产-消费者-生产交易。这里也是,如果在调用 API 消费者崩溃后,流程会从头开始,对吧?

是; Spring Apache Kafka 以与 Kafka Streams 相同的方式支持 exactly once 语义。

https://docs.spring.io/spring-kafka/docs/current/reference/html/#exactly-once

https://docs.spring.io/spring-kafka/docs/current/reference/html/#transactions

请记住,“恰好一次”意味着整个成功

消费 -> 处理 -> 生产

执行一次。但是,如果 produce 步骤失败(回滚事务),那么 consume -> process 部分是“至少一次”。

因此,您需要使 process 部分幂等。