【问题标题】:Kafka's exactly-once-semantics producer sideKafka 的一次性语义生产者端
【发布时间】:2020-03-26 19:55:07
【问题描述】:

我在看https://dzone.com/articles/interpreting-kafkas-exactly-once-semantics

好文章,但还有一个问题。

为了保证 KAFKA 的 Producer 端的恰好一次语义的幂等性:

  • 使用 producer.Props.put("enable.idempotence", "true") 设置为 true 是否足够?
  • 或者,我们是否也必须使用 producer.commitTransaction 以及?或者,仅在分区的情况下?

从文章中不清楚。我觉得文章有问题。重新启动 Producer 后 PID 可能会发生变化。

我不确定“承诺”方法是否可以通过阅读文章来解决这个问题,我认为不是,因为它是一个不同的方面。因此,再次声明的保证并不难恕我直言。正在寻找确认。

【问题讨论】:

标签: apache-kafka


【解决方案1】:

这只是方程式的一半 - 从 Spark / KAFKA 集成的角度来看:

端到端容错

结构化流通过检查点预写日志确保端到端的精确一次容错保证。

结构化流式处理源、接收器和底层执行引擎协同工作以跟踪流处理的进度。如果发生故障,流引擎会尝试重新启动和/或重新处理数据。

这种方法仅适用于流媒体源可重播的情况。为确保容错,结构化流式处理假设每个流式处理源都有偏移量,类似于:

  • Kafka 消息偏移量

  • Kinesis 序列号

在高层次上,底层流机制依赖于几种方法:

  • 首先,Structured Streaming 使用检查点和预写日志来记录每个触发间隔期间正在处理的数据的偏移范围。

  • 接下来,流式接收器被设计为幂等的,即多次写入相同数据(由偏移量标识)不会导致重复写入接收器。

    李>

综合起来,可重放的数据源和幂等接收器允许结构化流式处理在任何故障情况下确保端到端、精确一次的语义。

Sink 方面意味着我们需要考虑两件事。

【讨论】:

    猜你喜欢
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多