apache-kafka - Kafka Streams stateStores 容错一次?

标签 apache-kafka apache-kafka-streams fault-tolerance

我们正在尝试使用 Kafka Streams 实现重复数据删除服务。 总体而言,它将使用其rocksDB状态存储来在处理过程中检查现有 key 。

如果我错了,请纠正我,但为了使这些 stateStore 也具有容错能力,Kafka Streams API 将透明地复制 Kafka 主题内 stateStore 中的值(称为更改日志)。 这样,如果我们的服务出现故障,另一个服务将能够根据 Kafka 中找到的 ChangeLog 重建其 stateStore。

但这向我提出了一个问题,这个“StateStore -->changelog”本身是否恰好是一次? 我的意思是,当服务更新其 stateStore 时,它​​也会以一次的方式更新变更日志..? 如果服务崩溃,另一个服务将承担负载,但我们能否确定它不会错过崩溃服务的 stateStore 更新?

问候,

雅尼克

最佳答案

简短的回答是肯定的。

使用事务 - 原子多分区写入 - Kafka Streams 确保,当执行偏移提交时,状态存储也会刷新到代理上的更改日志主题。上述操作是原子的,因此如果其中一个操作失败,应用程序将从先前的偏移位置重新处理消息。

您可以在以下博客中阅读有关恰好一次语义的更多信息 https://www.confluent.io/blog/enabling-exactly-kafka-streams/ 。有一节:Kafka Streams 如何保证 Exactly-Once 处理

关于apache-kafka - Kafka Streams stateStores 容错一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54592072/

相关文章:

apache-kafka - 无法写入 kafka,broker 已关闭

java - kafka生产者单元测试(java)

java - 使用kafka lib反序列化PRIMITIVE AVRO KEY

java - 使用 Spring Boot 的 Resilience4J 断路器的 Bean 配置

scala - 如何发现 Scala 远程 Actor 死亡?

java - 消费者在 Apache Kafka 中消费消息的延迟

javascript - 为什么我的 kafkajs 客户端 (Node.js/express.js) 在获取主题元数据时抛出 'TypeError: topics.forEach is not a function'?

exception - 如何跳过在 Kafka 中产生运行时异常的记录并保持流运行?

c++ - Apache Kafka 可以与 C++ 一起使用吗?

multicore - 是否有支持锁步处理器的标准?