设置transactional.id.expiration.ms后生产者ID未如期过期问题咨询
事务ID未按预期过期的排查要点
明确配置生效条件:
transactional.id.expiration.ms仅针对空闲状态的事务ID生效。如果生产者持续发送事务消息或定期发送事务心跳,事务ID会保持活跃,不会触发过期。只有当生产者停止使用该ID且超过配置时长没有心跳时,才会被标记为过期。检查生产者行为:确认你的生产者是否在持续进行事务操作,或是否保持了事务心跳。Kafka生产者默认会维护事务心跳以维持事务ID的活跃性,只要心跳未中断,过期逻辑不会触发。
验证配置范围:确保通过Strimzi设置的
transactional.id.expiration.ms是集群级配置,而非仅应用于单个Broker。即使单个Broker加载了配置,集群内其他Broker未同步的话,也会导致预期行为不一致。理解过期触发时机:事务ID过期后,并不会立即中断正在运行的生产者。只有当生产者重启后尝试复用该事务ID,或者当前生产者的心跳中断后重新发起事务时,才会收到
InvalidProducerEpochException,此时才会体现出过期效果。排查事务状态:可以通过Kafka的命令行工具查看事务ID的状态,确认是否处于活跃状态:
kafka-transactions.sh --describe --transactional-id <你的事务ID> --bootstrap-server <broker地址>
内容的提问来源于stack exchange,提问作者Andras Hatvani
相关产品推荐
相关产品推荐

