在最新版本的Kafka 0.11.0.0中,Apache团队正在引入幂等生产者和交易。 是否有可能保证我们想要记录的整组消息(例如100万)只会在最后提交? 我想,如果例如生产者放松与经纪人的联系而不能重新安置它,消费者就不会看到消息。可能吗?
答案 0 :(得分:7)
是的,这可以使用生产者中的交易。您启动事务,发布所有消息,然后提交事务。所有消息一次写入Kafka,但新READ_COMMITTED模式下的消费者只能在生产者提交事务后看到消息,并且特殊事务标记被添加到Kafka提交日志中。
未处于READ_COMMITTED模式的消费者可以看到消息,因为它们是单独写入的,即使它们可能尚未(或曾经)提交过。
开放事务可以保持未提交的时间有一个限制,因此如果生产者死亡并且没有显式结束事务,它将超时并且回滚,READ_COMMITTED消费者永远不会看到这些消息。