Spring Kafka 消费者 ACKMODE 和生产者缓冲 Kafka 事务
Spring Kafka Consumer ACKMODE & Producer buffering for Kafka transactions
我需要使用 consume-process-produce 模式来处理 Kafka 消息,并配置了一个 Spring Kafka 侦听器容器和 Kafka 事务管理器,并且还设置了 transaction-id-prefix 以启用 Kafka交易。我正在使用 BATCH 的确认模式,并试图了解偏移量何时实际在这种模式下通过事务提交。文档似乎表明,一旦来自轮询的所有记录都被消耗完,确认模式 BATCH 就会提交偏移量——在事务上下文中也是如此吗,即每个轮询 1 个事务?
或者在使用 Kafka 事务时是否忽略了确认模式 BATCH(每个侦听器调用 1 个事务)?是这样吗,考虑到消费者需要为每条记录读取都与经纪人交谈,它会对消费者性能产生多大的不利影响?这是否也意味着我的响应生产者不能再缓冲记录并将它们批量发送给代理并且我失去了生产者异步性?
很抱歉在同一个问题中询问多个问题post(可能太多了)。
在使用事务时根本不使用AckMode。记录的偏移量在侦听器退出时和提交事务之前发送。
您可以使用批处理侦听器来改进,您可以在一次调用中 List<>
获取所有记录。
但是,为了正确支持生产者防护,您还应该将 subBatchPerPartition
(在 2.3.2 中添加)设置为 true,以便我们为 [=] 返回的每个 topic/partition
获得一个事务13=].
同样,子批次的偏移量将在侦听器退出时发送。
如果您不关心防护,您可以在一个事务中处理整个批次。
我需要使用 consume-process-produce 模式来处理 Kafka 消息,并配置了一个 Spring Kafka 侦听器容器和 Kafka 事务管理器,并且还设置了 transaction-id-prefix 以启用 Kafka交易。我正在使用 BATCH 的确认模式,并试图了解偏移量何时实际在这种模式下通过事务提交。文档似乎表明,一旦来自轮询的所有记录都被消耗完,确认模式 BATCH 就会提交偏移量——在事务上下文中也是如此吗,即每个轮询 1 个事务?
或者在使用 Kafka 事务时是否忽略了确认模式 BATCH(每个侦听器调用 1 个事务)?是这样吗,考虑到消费者需要为每条记录读取都与经纪人交谈,它会对消费者性能产生多大的不利影响?这是否也意味着我的响应生产者不能再缓冲记录并将它们批量发送给代理并且我失去了生产者异步性?
很抱歉在同一个问题中询问多个问题post(可能太多了)。
在使用事务时根本不使用AckMode。记录的偏移量在侦听器退出时和提交事务之前发送。
您可以使用批处理侦听器来改进,您可以在一次调用中 List<>
获取所有记录。
但是,为了正确支持生产者防护,您还应该将 subBatchPerPartition
(在 2.3.2 中添加)设置为 true,以便我们为 [=] 返回的每个 topic/partition
获得一个事务13=].
同样,子批次的偏移量将在侦听器退出时发送。
如果您不关心防护,您可以在一个事务中处理整个批次。