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中
相关推荐
JiaHao汤10 小时前
分布式事务方案全景:从理论到 Seata 落地
java·分布式·spring·spring cloud
南部余额12 小时前
RabbitMQ 进阶:延迟队列完全指南
java·分布式·spring·rabbitmq
ExC1dNtqz18 小时前
Redis 分布式锁进阶第六篇讲解
数据库·redis·分布式
Survivor00119 小时前
分布式事务解决方案Seata源码分析
分布式·系统架构
我登哥MVP19 小时前
SpringCloud Alibaba 核心组件解析:分布式事务(Seata)
java·spring boot·分布式·spring·spring cloud·java-ee·intellij-idea
ACP广源盛1392462567320 小时前
GSV6155@ACP#DP 1.4a 重定时器芯片,物理 AI 信号长距传输的稳定保障
大数据·人工智能·分布式·嵌入式硬件·spark
linux修理工2 天前
使用codebuddy学习kafka
分布式·学习·kafka
阿 才2 天前
跟文件系统(busybox)的构建
大数据·hadoop·分布式
老纪2 天前
Redis分布式锁进第九零篇
数据库·redis·分布式
Amy187021118232 天前
分布式光伏防孤岛保护:技术逻辑、标准演进与工程实践全解析
分布式