Transactions 在消费转换发布模型中,Kafka消费事务提交必须按顺序进行吗?

Transactions 在消费转换发布模型中,Kafka消费事务提交必须按顺序进行吗?,transactions,apache-kafka,Transactions,Apache Kafka,我花了相当多的时间寻找以下问题的答案,并在这方面找到了一篇文章,但不确定它是否适用于v0.11+启用的消费转换发布模型 假设Kafka v1.1和三个发布者编写一个处理“输入”主题分区。每个人都发布一批消息,并且只按批提交。此外,该输入分区的处理使用者必须只转换(并提交到输出主题)整个批处理,或者不转换。但是,每个批处理消息可以与主题分区中的其他批处理消息交错。例如,由三个发布者进行的两个记录批处理可能如下所示: P1 writes Message p1-m1 P2 writes Message

我花了相当多的时间寻找以下问题的答案,并在这方面找到了一篇文章,但不确定它是否适用于v0.11+启用的消费转换发布模型

假设Kafka v1.1和三个发布者编写一个处理“输入”主题分区。每个人都发布一批消息,并且只按批提交。此外,该输入分区的处理使用者必须只转换(并提交到输出主题)整个批处理,或者不转换。但是,每个批处理消息可以与主题分区中的其他批处理消息交错。例如,由三个发布者进行的两个记录批处理可能如下所示:

P1 writes Message p1-m1
P2 writes Message p2-m1
P1 writes Message p1-m2
P1 commits
P3 writes Message p3-m1
P2 writes Message p2-m2
P2 commits.
P3 writes Message p3-m2
(P3 not yet committed.)
分区现在看起来如下所示,其中p1和p2消息由其发布者提交,p3消息尚未提交:

Offset 1:   p1-m1
Offset 2:   p2-m1
Offset 3:   p1-m2
Offset 4:   p3-m1   not committed
Offset 5:   p2-m2
Offset 6:   p3-m2   not committed
处理消费者仅轮询read_提交的消息,因此在偏移量1到3处接收消息。它(从数据)识别出它有一个完整的批次p1和一个不完整的批次p2。它转换P1记录,在输出主题上开始新事务,写入输出主题,通过sendOffsetsToTransaction从输入主题分区传递偏移量1和3,并提交批处理

与此同时,P3随后提交—所以现在所有消息都已提交—但是…。消费处理器此时决定离开,保留未提交的消费偏移量2

会发生什么?一方面,我们必须将每个消费偏移量传递给sendOffsetToTransaction,这意味着每个都独立地标记为提交消费。如果是这样,那么这似乎意味着下一个访问输入分区的使用者将轮询并在偏移量2、4、5和6处接收消息,对吗

或者偏移量2处的消息丢失是因为我们在处理偏移量2之前提交了偏移量3?如果是这样,那么在调用sendOffsetsToTransaction时必须传递每个消费偏移量的原因是什么?如果只传递最后一个就足够了