# Apache Kafka 消费组与投递语义:有序性、幂等与事务 ## 有序性与分区 - Kafka 按分区保证顺序;为需要顺序的键选择一致的分区键 - 跨分区不保证全局顺序,使用聚合层或业务补偿 ## 幂等生产配置 ``` acks=all enable.idempotence=true max.in.flight.requests.per.connection=1 retries=INT_MAX ``` ## 事务性生产与消费 ``` transactional.id=app-tx-001 ``` - 生产者:初始化事务、开始事务、发送消息、将消费位点写入事务、提交事务 - 消费者:启用读事务性消息并关闭自动提交 ### Java 示例(伪代码) ```java producer.initTransactions(); producer.beginTransaction(); producer.send(record); producer.sendOffsetsToTransaction(offsets, groupId); producer.commitTransaction(); ``` ## 消费者要点 ``` enable.auto.commit=false max.poll.interval.ms=300000 session.timeout.ms=10000 ``` - 批量处理后按分区同步提交位点,避免重复或遗漏 ## 重试与回退 - 幂等+事务可实现端到端至少一次与有效的去重 - 失败路由至死信队列,保留审计与重放能力 ## 总结 通过分区建模、幂等与事务组合,Kafka 能在高并发场景下提供稳定的顺序与可控的一致性。

发表评论 取消回复