我在读过程写系统中使用Kafka,希望利用恰好一次的处理。
对于从使用者poll
读取的每条消息,我都会根据消息的主题和分区来抓取一个缓存的生产者实例。为了生成生产者的交易ID,我使用{consumer group}-{topic}-{partition}
。这应该确保如果在处理过程中发生使用者组重新平衡事件,则旧实例将被隔离,从而确保其输出被忽略。目前,这是在每个消息的基础上进行的,次优。
明显的快速提升是从同一主题分区的消息中收集所有输出,并将它们作为单个事务提交。在许多情况下,我们正在阅读多个主题,因此我的问题是:除了以下情况之外,还有什么更好的方法可以确保在这种情况下完全匹配一次:
poll
方法的消息按其分组
主题/分区commitTransaction
中提交所有写入和偏移量更新