有一系列关于Kafka交易的精彩文章,恰好交货一次。
在其中一个人中,作者对消费者说:
因此,在消费者方面,您有两个通过``Inlyvel.Level''消费者config:
表示的读取交易消息的选项。read_committing:除了读取不是交易的一部分的消息之外,还能够读取那些之后的消息 交易是为了承诺。
read_uncommitten:以偏移顺序读取所有消息,而无需等待交易的投入。此选项类似于 卡夫卡消费者的当前语义。
也就是说,普通的消费者应用程序必须指定 read_committed
,如果唯一要读取commit从该主题写入commit。
但是关于kafka流:
您需要将流申请精确到一次 语义是设置此config" processing.guarantee = extry_once"。 这导致所有处理完全发生。这 包括制作处理以及所有实现的 由写回Kafka的处理作业创建的状态, 正是一次。
关于kstream中的读物的明确说明。当配置exactly_once
时
是的,kStream只会读取订单的消息,文档中并未清楚地说明,但是在streamsconfig javadoc中,您会找到信息:
如果" processing.guarantee"设置为"恰好_once",则KAFKA流不允许用户覆盖以下属性(括号中显示的流设置(: "隔离。级别"(read_committit( - 消费者将始终仅读取指定的数据 " enable.idempotence"(true( - 生产者将始终启用势力 " max.in.flight.requests.per.connection"(5( - 生产者将始终每个连接有一个飞行请求