卡夫卡一次语义制作人方面

时间:2019-12-03 12:43:47

标签: apache-kafka

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

好文章,尽管仍有疑问。

要保证KAFKA的生产者方具有一次语义,就具有同等性:

  • 使用将producer.Props.put(“ enable.idempotence”,“ true”)设置为true是否足够?
  • 或者,我们是否还必须使用producer.commitTransaction ?还是只有分区了?

文章不清楚。我认为文章中有一个问题。重新启动生产者后,PID可能会更改。

我不确定通过阅读本文是否可以解决“提交”问题,因为这是一个不同的方面。因此,再次说明的保证不是一项艰巨的任务。寻找确认。

1 个答案:

答案 0 :(得分:0)

这只是等式的一半-从Spark / KAFKA Integration角度来看:

端到端容错

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

结构化的流源,接收器和基础执行引擎一起工作以跟踪流处理的进度。如果发生故障,流引擎将尝试重新启动和/或重新处理数据。

仅当流媒体源可重播时,此方法才有效。为了确保容错,结构化流假定每个流源都有偏移量,类似于:

  • Kafka消息偏移量

  • 运动学序列号

从高层次看,底层的流传输机制依赖于以下两种方法:

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

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

将可重播的数据源和幂等的汇聚在一起,可以使结构化流技术在任何故障情况下确保端到端,一次精确的语义。

接收器方面意味着我们需要考虑两件事。