我们可以使用 Spring kafka 进行一次处理吗?
Can we have exactly-once-processing with Spring kafka?
我正在尝试使用 Kafka Consumer 的 exactly-once 消费。
我的要求是:
- 从主题读取数据
- 处理数据[涉及调用另一个API]
- 将响应写回 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
部分幂等。
我正在尝试使用 Kafka Consumer 的 exactly-once 消费。
我的要求是:
- 从主题读取数据
- 处理数据[涉及调用另一个API]
- 将响应写回 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
部分幂等。