卡夫卡交易生产者和消费者

时间:2018-08-08 14:45:19

标签: apache-kafka

Kafka为每个消息生成偏移量。说,我正在生成消息5,并且偏移量将从1到5。

但是,在一个事务生产者中,说,我产生了5条消息并提交了,然后发出5条消息,但是中止了,然后提交了5条消息。

  1. 那么,最后提交的5条消息的偏移量将是6到10还是11到15?

  2. 如果我不放弃或不提交怎么办。消息仍会发布吗?

  3. Kafka如何忽略未提交的偏移量?因此,kafka提交日志是基于偏移量的。是否将事务提交日志用于事务使用者来提交偏移量并返回上一个稳定偏移量?还是来自__transaction_state主题来维护偏移量?

谢谢

1 个答案:

答案 0 :(得分:2)

  1. 最后5条消息的偏移量为11到15。使用isolation.level=read_committed进行消费时,使用者将从偏移量6跳到11。

  2. 如果您不提交或中止事务,则transaction.max.timeout.ms到期后,该事务将自动超时(中止)。

  3. 除了消息数据外,Kafka还存储了一堆元数据,并且能够为每条消息标识是否已提交。由于提交偏移量与写入分区相同(唯一的不同是,它是由Kafka在内部主题__consumer_offsets中自动完成的),因此偏移量的工作方式相同。通过sendOffsetsToTransaction()添加的中止或未提交的偏移量将自动跳过。

正如您在另一个问题中提到的,我建议您看一下向Kafka添加了一次精确语义的KIP。它详细介绍了所有这些机制,并将帮助您更好地理解:https://cwiki.apache.org/confluence/display/KAFKA/KIP-98+-+Exactly+Once+Delivery+and+Transactional+Messaging