Kafka Stream中恰好一次处理配置是否可以保证仅读取已提交的读取?

时间:2019-06-26 11:07:31

标签: apache-kafka apache-kafka-streams

关于Kafka交易以及一次交货的文章非常多。
In one of them作者谈到消费者:

  

因此,在使用者方面,您有两个用于读取事务性消息的选项,它们通过“ isolation.level”使用者配置表示:

     

read_committed:除了读取不属于事务的消息外,还可以读取   交易已提交。

     

read_uncommitted:按偏移顺序读取所有消息,而无需等待事务提交。此选项类似于   Kafka使用者的当前语义。

也就是说,如果普通消费者应用程序仅希望从该主题读取提交写入,则必须指定read_committed

但是关于Kafka Streams:

  

使Streams应用程序只使用一次所需的全部   语义,就是将此配置设置为“ processing.guarantee = exactly_once”。   这将导致所有处理仅发生一次。这个   包括既进行处理又进行所有物化   由写回Kafka的处理作业创建的状态,   一次。

关于KStream中的读取,没有明确说明。配置exactly_once后,KStream是否仅读取已提交的消息?

1 个答案:

答案 0 :(得分:2)

是的,KStream仅读取已提交的消息,文档中没有明确说明,但是在StreamsConfig JavaDoc中您会找到以下信息:

  

如果将“ processing.guarantee”设置为“ exactly_once”,则Kafka Streams不允许用户覆盖以下属性(括号中显示的Streams设置):   “ isolation.level”(read_committed)-使用者将始终仅读取已提交的数据   “ enable.idempotence”(true)-生产者将始终启用幂等性   “ max.in.flight.requests.per.connection”(5)-生产者每次连接总是有一个进行中的请求