【发布时间】:2020-02-11 06:38:45
【问题描述】:
因此,据我从Transactions in Apache Kafka 了解到,read_committed 消费者不会返回作为正在进行的事务的一部分的消息。所以,我猜,消费者可以选择在那些正在进行的事务消息之后提交它的偏移量(例如,读取非事务消息),或者在遇到的事务被提交/中止之前不做进一步的处理。我只是假设(Kafka)允许它跳过那些待处理的事务记录,但是考虑到它的偏移量可能已经很远,消费者在提交时将如何读取它们?
更新
考虑到该主题可能包含来自非事务性生产者和事务性生产者的记录(也称为消息)。例如,考虑一个主题的分区:
non-transact-Xmsg, from-transact-producer1-msg, from-transact-producer2-msg, non-transact-Ymsg
如果consumer遇到from-transact-producer1-msg他会跳过消息然后阅读non-transact-Ymsg还是会只需在尚未提交的 from-transact-producer1-msg 之前挂起,这样做就不会读取 non-transact-Ymsg?
还考虑到可能有许多事务生产者和许多 from-transact-producer1-msg 的等价物,有些承诺有些没有。因此,from-transact-producer2-msg 可能是消费者到达 non-transact-Xmsg 时的承诺。
【问题讨论】:
-
在同一个 Confluent 博客中声明 "...消费者不需要 [sic] 任何缓冲来等待交易完成。相反,代理不需要允许它提前到包括未结交易的抵消。"
-
这部分让我感到困惑,因为它并没有说不允许消费者跳过待处理的交易记录来阅读例如非交易记录。但是当待处理的事务记录被提交时会发生什么呢?它们是否会因为在待处理时被跳过而保持未阅读状态?消费者会以某种方式自动返回吗?这些都没有意义。
标签: apache-kafka kafka-consumer-api kafka-transactions-api