个人网站和企业网站区别,网络运维工程师是干什么的,做网站公司cnfg,犀牛网站建设公司消息丢失
生产者方#xff1a;设置ack为1或-1/all可以防止生产的消息丢失#xff0c;如果要做到生产消息成功率提高到最高#xff0c;ack设置成all#xff0c;把min.insync.replicas配置成分区备份数#xff0c;把ack设置成1或者-1/all#xff0c;这样生产者生产的消息发…消息丢失
生产者方设置ack为1或-1/all可以防止生产的消息丢失如果要做到生产消息成功率提高到最高ack设置成all把min.insync.replicas配置成分区备份数把ack设置成1或者-1/all这样生产者生产的消息发送到broker中会等待leader或者至少leader和一个副本同步到消息才会返回ack如果生产者同步消息失败会进行重试 $conf-set(message.send.max.retries, 5);// -1必须等所有brokers同步完成的确认 1当前服务器确认 0不确认这里如果是0回调里的offset无返回如果是1和-1会返回offset// 我们可以利用该机制做消息生产的确认不过还不是100%因为有可能会中途kafka服务器挂掉$conf-set(request.required.acks, 1);消费者方把自动提交改为手动提交offset
重复消费
生产者通过ack设置尽量保证消息不回重复发送但是因为网络抖动和重试机制还是会导致消息重复消费者对关键数据进行幂等处理防止关键数据重复处理。一般实现幂等的操作: 数据投递之前生成唯一uuid数据消费的时候使用乐观锁防止重复消费
保持数据有序
生产者投递数据时支持根据关键数据例如uid生成哈希值同一个uid可以投递到指定的partition日志类的数据可以在投递数据前就记录生成时间消费的时候根据时间存储到db中