线上问题及优化
- 消息丢失
- 发送端min.insync.replicas配置>1
- 消费端手动提交offset
- 重复消费
- 发送 由于重试机制 解决办法
- 消费 消费幂等处理 redis setnx 分布式锁
- 消息乱序
- ack不为0 同步发送到相同分区
- countDownLanch 消费端业务处理
- 消息积压
- 修改消费端程序 将其快速转发到其他topic 再启动多个消费者同时消费新主题不同分
- 转类似死信队列
- 延时队列 使用特定主题 使用定时器
- 消息回溯 用consumer的offsetsForTimes seek等方法
- kafka分区上限 分布式存储redis集群 上限100个节点
测试脚本 kafka-producer-perf-test.sh
- 消息传递保障
- at most once <=1条ack=0
- at least once >=1条ack=all ack=-1
- exactly once 消费幂等性+at least once还可以用kafka生产者的幂等性实现
- kafka事务 一批消息同时成功同时失败
- 高性能原因 顺序读写 零拷贝(sendfile->网卡接口 MMAP内存映射技术) 批量batch处理以及压缩传输 rocketmq预留1G文件空间