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中
相关推荐
梦里不知身是客119 小时前
Spark的容错机制
大数据·分布式·spark
大数据CLUB16 小时前
酒店预订数据分析及预测可视化
大数据·hadoop·分布式·数据挖掘·数据分析·spark·mapreduce
不见长安在1 天前
分布式ID
java·分布式·分布式id
qq_316837751 天前
jmeter 分布式压测
分布式·jmeter
Hello.Reader1 天前
基于 Flink CDC 的 MySQL → Kafka Streaming ELT 实战
mysql·flink·kafka
西岭千秋雪_1 天前
Zookeeper实现分布式锁
java·分布式·后端·zookeeper·wpf
毕设源码-钟学长1 天前
【开题答辩全过程】以 分布式菌菇销售系统为例,包含答辩的问题和答案
分布式
千禧皓月1 天前
【C++】基于C++的RPC分布式网络通信框架(二)
c++·分布式·rpc
教练、我想打篮球2 天前
05 kafka 如何存储较大数据记录
java·kafka·record