保证 Kafka Producers 的唯一全球交易
Guarantee unique global transaction for Kafka Producers
在最新版本的 Kafka 0.11.0.0 中,Apache 团队引入了幂等生产者和交易。
是否可以保证我们要记录的一整套消息(例如 100 万条)只会在最后提交?
我希望这样,例如,如果生产者与经纪人失去联系并且无法重新建立联系,那么消费者将看不到任何消息。可能吗?
是的,这可以在您的生产者中使用交易。您启动事务,发布所有消息,然后提交事务。所有的消息都是一次一个地写入 Kafka,但是在新的 READ_COMMITTED 模式下,消费者只能在生产者提交事务并且在 Kafka 提交日志中添加一个特殊的事务标记后才能看到消息。
不在 READ_COMMITTED 模式下的消费者可以看到消息,因为它们是单独编写的,即使它们可能尚未(或永远不会)被提交。
打开的事务可以保持未提交的时间是有限制的,所以最终如果生产者死亡并且没有明确结束事务,它将超时并回滚并且 READ_COMMITTED 消费者将永远不会看到这些消息。
在最新版本的 Kafka 0.11.0.0 中,Apache 团队引入了幂等生产者和交易。 是否可以保证我们要记录的一整套消息(例如 100 万条)只会在最后提交? 我希望这样,例如,如果生产者与经纪人失去联系并且无法重新建立联系,那么消费者将看不到任何消息。可能吗?
是的,这可以在您的生产者中使用交易。您启动事务,发布所有消息,然后提交事务。所有的消息都是一次一个地写入 Kafka,但是在新的 READ_COMMITTED 模式下,消费者只能在生产者提交事务并且在 Kafka 提交日志中添加一个特殊的事务标记后才能看到消息。
不在 READ_COMMITTED 模式下的消费者可以看到消息,因为它们是单独编写的,即使它们可能尚未(或永远不会)被提交。
打开的事务可以保持未提交的时间是有限制的,所以最终如果生产者死亡并且没有明确结束事务,它将超时并回滚并且 READ_COMMITTED 消费者将永远不会看到这些消息。