kafka幂等和交易生产者设置之间的区别?
Difference between kafka idempotent and transactional producer setup?
设置 kafka 生产者以使用幂等行为和事务行为时:
我理解为了幂等性我们设置:
enable.idempotence=true
并且通过更改生产者上的这个标志,我们可以保证恰好一次事件传递?
对于交易,我们必须更进一步并设置 transaction.id=<some value>
但是通过设置这个值,它也将幂等设置为真?
此外,通过将以上一项或两项设置为 true,生产者还将设置 acks=all。
有了上面的内容,我是否可以通过简单地更改启用幂等性设置来添加 'exactly once delivery'?如果我想更进一步并启用事务支持,在消费者方面,我只需要更改他们的设置,isolation.level=read_committed
?此图像是否反映了如何根据 EOS 设置 producer?
是的,您理解了主要概念。
通过启用幂等性,生产者自动将 acks
设置为 all
并保证在生产者实例的生命周期内传递消息。
通过启用事务,生产者自动启用幂等性(和 acks=all
)。事务允许对生产请求和抵消提交进行分组,并确保全部或没有提交给 Kafka。
使用事务时,您可以通过将 isolation.level
设置为 read_committed
来配置消费者是否只应查看来自已提交事务的记录,否则默认情况下他们会看到所有记录,包括来自已丢弃事务的记录。
实际上,幂等性本身并不总是保证事件传递恰好一次。假设您有一个消费者消费一个事件,处理它并产生一个事件。在此过程中的某个地方,消费者使用的偏移量必须递增并持久化。如果没有事务性生产者,如果它发生在生产者发送消息之前,则消息可能不会被发送并且最多发送一次。如果您在消息发送后执行此操作,则可能无法持久保存偏移量,然后消费者将再次阅读相同的消息,生产者将发送副本,您至少会获得一次交付。事务生产者的全有或全无机制可以防止这种情况发生,因为您将偏移量存储在 kafka 上,新消息和消费者偏移量的增加成为一个原子操作。
设置 kafka 生产者以使用幂等行为和事务行为时:
我理解为了幂等性我们设置:
enable.idempotence=true
并且通过更改生产者上的这个标志,我们可以保证恰好一次事件传递?
对于交易,我们必须更进一步并设置 transaction.id=<some value>
但是通过设置这个值,它也将幂等设置为真?
此外,通过将以上一项或两项设置为 true,生产者还将设置 acks=all。
有了上面的内容,我是否可以通过简单地更改启用幂等性设置来添加 'exactly once delivery'?如果我想更进一步并启用事务支持,在消费者方面,我只需要更改他们的设置,isolation.level=read_committed
?此图像是否反映了如何根据 EOS 设置 producer?
是的,您理解了主要概念。
通过启用幂等性,生产者自动将 acks
设置为 all
并保证在生产者实例的生命周期内传递消息。
通过启用事务,生产者自动启用幂等性(和 acks=all
)。事务允许对生产请求和抵消提交进行分组,并确保全部或没有提交给 Kafka。
使用事务时,您可以通过将 isolation.level
设置为 read_committed
来配置消费者是否只应查看来自已提交事务的记录,否则默认情况下他们会看到所有记录,包括来自已丢弃事务的记录。
实际上,幂等性本身并不总是保证事件传递恰好一次。假设您有一个消费者消费一个事件,处理它并产生一个事件。在此过程中的某个地方,消费者使用的偏移量必须递增并持久化。如果没有事务性生产者,如果它发生在生产者发送消息之前,则消息可能不会被发送并且最多发送一次。如果您在消息发送后执行此操作,则可能无法持久保存偏移量,然后消费者将再次阅读相同的消息,生产者将发送副本,您至少会获得一次交付。事务生产者的全有或全无机制可以防止这种情况发生,因为您将偏移量存储在 kafka 上,新消息和消费者偏移量的增加成为一个原子操作。