Kafka常见使用问题

消息丢失

  1. 生产者方:设置ack为1或-1/all可以防止生产的消息丢失,如果要做到生产消息成功率提高到最高,ack设置成all,把min.insync.replicas配置成分区备份数,把ack设置成1或者-1/all,这样生产者生产的消息发送到broker中,会等待leader或者至少leader和一个副本同步到消息才会返回ack,如果生产者同步消息失败,会进行重试
php 复制代码
		$conf->set('message.send.max.retries', 5);
        // -1必须等所有brokers同步完成的确认 1当前服务器确认 0不确认,这里如果是0回调里的offset无返回,如果是1和-1会返回offset
        // 我们可以利用该机制做消息生产的确认,不过还不是100%,因为有可能会中途kafka服务器挂掉
        $conf->set('request.required.acks', 1);
  1. 消费者方:把自动提交改为手动提交offset

重复消费

  1. 生产者:通过ack设置,尽量保证消息不回重复发送,但是因为网络抖动和重试机制,还是会导致消息重复
  2. 消费者:对关键数据进行幂等处理,防止关键数据重复处理。一般实现幂等的操作:
    • 数据投递之前生成唯一uuid
    • 数据消费的时候,使用乐观锁,防止重复消费

保持数据有序

  1. 生产者投递数据时,支持根据关键数据(例如uid)生成哈希值,同一个uid可以投递到指定的partition
  2. 日志类的数据,可以在投递数据前,就记录生成时间,消费的时候,根据时间存储到db中
相关推荐
gQ85v10Db18 小时前
Redis分布式锁进阶第三十一篇
数据库·redis·分布式
未若君雅裁1 天前
Redis 分布式锁与 Redisson:从抢券超卖讲到 WatchDog、可重入和 RedLock
redis·分布式
Jackyzhe1 天前
从零学习Kafka:幂等与事务
数据库·学习·kafka
一只普通的码农1 天前
Filebeat 在windows环境部署并结合kafka使用
分布式·kafka
covco1 天前
AI 原生营销矩阵系统:分布式架构设计与核心模块实现
人工智能·分布式·矩阵
Java识堂1 天前
Kafka 如何保证消息的可靠性投递?
分布式·kafka
NineData1 天前
还在轮询 MySQL 吗?用 NineData 把业务变更直接送进 Kafka
数据库·mysql·kafka·ninedata·数据复制·玖章算术·数据迁移工具
gQ85v10Db1 天前
Redis分布式锁进阶第三十二篇
数据库·redis·分布式
Devin~Y1 天前
大厂Java面试实录:Spring Boot微服务 + Redis/Kafka + Prometheus/Jaeger + RAG/Agent(小Y水货版)
java·spring boot·redis·spring cloud·kafka·prometheus·jaeger
gQ85v10Db1 天前
Redis分布式锁进阶第三十篇
数据库·redis·分布式