Apache kafka 消费者将如何读取提交的消息?

Apache kafka 消费者将如何读取提交的消息?,apache-kafka,kafka-consumer-api,kafka-transactions-api,Apache Kafka,Kafka Consumer Api,Kafka Transactions Api,因此,据我从中了解,read_承诺的消费者不会返回作为正在进行的事务的一部分的消息。因此,我猜想,消费者将可以选择提交其偏移量超过那些正在进行的事务消息(例如,读取非事务消息),或者选择在提交/中止遇到的事务之前不进行进一步的升级。我只是假设(卡夫卡)会允许它跳过那些挂起的交易记录,但考虑到其偏移量可能已经很遥远,那么消费者在提交时将如何读取这些记录呢 更新 考虑到该主题可能混合了来自非事务性生产者和事务性生产者的记录(也称为消息)。例如,从一个主题考虑这个分区: 非交易Xmsg、from-tr

因此,据我从中了解,read_承诺的消费者不会返回作为正在进行的事务的一部分的消息。因此,我猜想,消费者将可以选择提交其偏移量超过那些正在进行的事务消息(例如,读取非事务消息),或者选择在提交/中止遇到的事务之前不进行进一步的升级。我只是假设(卡夫卡)会允许它跳过那些挂起的交易记录,但考虑到其偏移量可能已经很遥远,那么消费者在提交时将如何读取这些记录呢

更新

考虑到该主题可能混合了来自非事务性生产者和事务性生产者的记录(也称为消息)。例如,从一个主题考虑这个分区:

非交易Xmsg、from-transact-producer1-msg、from-transact-producer2-msg、非交易Ymsg

如果消费者遇到from-transact-producer1-msg,他会跳过该消息然后读取非transact-Ymsg,还是在尚未提交from-transact-producer1-msg之前挂起,这样做不会读取非transact-Ymsg


还可以考虑,可能有许多事务性生产者和from-transact-producer1-msg的许多等价物,有些提交了,有些没有。因此,from-transact-producer2-msg在消费者到达非transact-Xmsg时可能是一个已提交的消息。

您的要求不是100%清楚,但如果我没有弄错,您希望能够重新处理一些已消费的消息,因为某些原因,您在第一次消费时无法成功处理这些消息。而且-你不想被这些信息“卡住”,你更愿意继续前进,以后再处理这些信息。 在这种情况下,最好的选择可能是将它们写入不同的队列,让另一个消费者读取那些“失败”的消息,然后根据需要重试

来自文档关于:

消息将始终按偏移顺序返回。因此,在
read\u committed
模式下,
consumer.poll()
将只返回
最后一个稳定偏移量(LSO)
之前的消息,该偏移量小于第一个打开事务的偏移量特别是,在属于正在进行的交易的消息之后出现的任何消息都将被保留,直到相关交易完成。因此,
read\u committed
消费者将无法读取高水位线


谢谢,但问题是关于卡夫卡交易和消费者在继续前进的同时过滤未提交的交易。在某个时候,消费者也应该返回提交的事务,但是如何返回呢?他已经超越了现在提交的事务(其卡夫卡偏移量)。请参阅更新,其中强调了在一个主题的分区中混合使用基于事务或非基于事务的记录(也称为消息)的可能性,加上许多事务生产者的记录也混合在一起。在同一个合流博客中“…使用者不需要[sic]任何缓冲来等待事务完成。相反,经纪人不允许其提前进行包括未结交易在内的抵销。“这一部分让我感到困惑,因为它并没有说消费者不允许为了读取非交易记录而跳过待处理的交易记录。但是,当挂起的事务记录被提交时会发生什么呢?它们是否会因为在挂起时被跳过而保持不读取?消费者会以某种方式自动返回吗?这些都没有意义。