我只使用kafka提供的一次语义。因此,我的生产者在事务中写了一条消息。当我的生产者发送第100条消息时,恰好在send()
和commitTransaction()
之间;我杀死了生产者程序。
我阅读了本主题中的最后几条未提交的消息。
Consumer record offset - message number
0 - 1
2 - 2
196 - 99 <- Last committed message by producer
198 - 100 <- 100th message was sent but not committed
现在,当我以read_committed
隔离级别运行使用者时。它精确地读取1-99条消息。但是为此,我阅读了整个主题。最终,我将在一个主题中存储数百万条消息。因此,阅读整个主题不是可取的。
此外,假设消费者正在从代理人轮询消息,并且与kafka borker和消费者存在一些通信问题。消费者读取的最后一条消息为offset#50。这意味着我无法可靠地确定主题中最后提交的消息。
我使用了其他方法,即
seekToEnd() - took me to offset#200
endOffsets() - took me to offset#200
有没有办法获得卡夫卡制作人可靠提交的消息?(在我的情况下为Offset#196
)