普洱网站建设优化,列表网免费发布信息,校园网站建设项目总结报告,宁波网站建设设计制作公司Kafka 消息不丢失生产者丢失消费者丢失不丢失配置Kafka 保证消息不丢失#xff1a;只对已提交的消息 (committed message) 做有限度的持久化保证
已提交的消息#xff1a;当 n 个 Broker 成功接收到该消息并写入到日志文件后#xff0c;就告诉生产者该消息已成功提交有限度…
Kafka 消息不丢失生产者丢失消费者丢失不丢失配置Kafka 保证消息不丢失只对已提交的消息 (committed message) 做有限度的持久化保证
已提交的消息当 n 个 Broker 成功接收到该消息并写入到日志文件后就告诉生产者该消息已成功提交有限度的持久化保证 : 消息保存在 N 个 Broker 上要至少有 1 个存活Kafka 只对已提交的消息并满足一定的条件能实现不丢失消息
生产者丢失
Kafka Producer 是异步发送消息的 调用 producer.send(msg)会立即返回就无法知道消息是否发送成功
消息发送不成功的原因
网络抖动 : 导致消息就没有发到 Broker 端消息本身不合格导致 Broker 拒绝接收 (如 : 消息太大)所有的 Broker 都挂了
解决方法Producer 用 producer.send(msg, callback)有回调通知的发送 API
消费者丢失
Consumer 端的位移
位移该 Consumer 消费当前 Topic 分区的位置
Consumer 的对位移的消息丢失解决
先消费消息再更新位移的顺序能最大限度地保证消息不丢失但可能消息的重复处理 Consumer 用多个线程异步处理消息并自动更新位移
当某个线程运行失败某个消息没有被成功处理但位移已经更新该消息对 Consumer 就是丢失状态解决方案Consumer 手动提交位移
不丢失配置
当 ISR 只有 1 个副本 acksall 相当于 acks1min.insync.replicas 目的 下限的限制不能只满足 ISR 全部写入还要保证 ISR 中的写入个数大于 min.insync.replicas对可重试的错误retries 才会触发否则直接进入到 callback
Producerproducer.send(msg, callback)用带回调通知的 send 方法acks allall所有副本 Broker 都接收到消息才认为已提交retries 0自动重试消息发送避免消息丢失Brokerunclean.leader.election.enable false不允许落后 Leader的Broker成为新Leaderreplication.factor 3消息多副本min.insync.replicas 1消息至少要写入 n 个副本才是已提交replication.factor min.insync.replicas 1防止一个副本挂了整个分区就无法正常工作Consumerenable.auto.commit false手动提交位移