Kafka消费者读取提交

bf1o4zei  于 2023-03-28  发布在  Apache
关注(0)|答案(1)|浏览(111)

我读了很多Kafka关于交易的文献,但有一件事我仍然不清楚。
当我有一个生产者,为我的主题生产事务性和非事务性消息时,我的消费者(具有属性read_committed)仍然会以正确的顺序读取吗?
1分区示例:
1.生产者A在一个事务中产生3条消息-〉所以3条新的未提交消息在主题上
1.生产者A产生3个非事务性消息
1.生产者A从1提交事务。
我的消费者是否正在等待来自% 1.的事务提交或中止以遵循正确的顺序,然后读取来自% 2.的消息?
我唯一发现的是:“Kafka保证消费者最终只会传递非事务性消息或已提交的事务性消息。它将保留打开事务的消息,并过滤掉已中止事务的消息。”但我想这并没有回答我的问题。
已阅读Spring Kafka文档

s8vozzvw

s8vozzvw1#

消费者的行为取决于其isolation.level配置。

  • 使用isolation.level=read_uncommitted(默认),消费者将在生成3个事务性消息后立即读取它们,然后读取3个非事务性消息。
  • 使用isolation.level=read_committed,消费者在提交包含前3条消息的事务之前不会读取任何消息。一旦提交,它将读取3条事务性消息,然后读取3条非事务性消息。如果事务被中止,它将跳过3条事务性消息,只读取3条非事务性消息。

使用read_committed时,使用者在到达不属于已提交(或已中止)事务的记录时阻塞,并等待该事务完成。在不手动显式更改使用者位置的情况下,记录始终按顺序使用。

相关问题