Kafka如何确保数据不丢失,有何高招?
- 内容介绍
- 文章标签
- 相关推荐
哎呀,说起 Kafka 那叫一个让人又爱又恨——它到底怎么保证那可怕的“数据不丢失”呢?先别急, 我这篇文章要把各种套路、坑爹的细节全dou掰开揉碎, 蚌埠住了! 像老妈子炒菜一样把每一味配料撒进去,让你kan完后脑袋嗡嗡作响,却还Neng记住点儿真材实料。
一、 先别慌:Kafka 的“永不掉链子”到底是个啥玩意儿
Kafka 本身是个分布式日志系统,它把消息写进磁盘,磁盘嘛——永远是硬盘,不是内存。磁盘持久化是它防止数据在机器宕机时“啪”一下就消失的第一层保险。可是光靠磁盘也不行, 还得靠、ISR以及这些小技巧来双保险。

1️⃣ 副本——冗余的兄弟们
每个 Partition dou会有 N 个副本, 其中一个是 Leader,其他的是 Follower。只要 Leader 挂了 只要还有足够多的 Follower 在 ISR 队列里Kafka 就会选出新的 Leader,继续提供服务。 关键点:如guo你把 min.insync.replicas=2 配成两条, 那么即使只有两条副本同步成功,生产者仍然可yi写入,否则就会抛异常,我晕...。
2️⃣ ACKS = all —— “全员到齐才Neng走”
生产者端配置 acks=all意思是必须等suo有 ISR 中的副本dou确认写入成功后才算成功返回。这样即便 Leader 瞎了眼, 有啥用呢? 也不会导致消息丢失——主要原因是 Follower Yi经把数据刷到磁盘了。
二、 生产者侧的小技巧:幂等性 & 重试策略
我emo了。 幂等生产者从 0.11 起就来了它会给每条消息分配一个唯一的 producer.id 和递增的 sequence numberBroker 会检测重复并抛弃,从而避免因网络抖动导致的“重复投递”。
哎呀,说起 Kafka 那叫一个让人又爱又恨——它到底怎么保证那可怕的“数据不丢失”呢?先别急, 我这篇文章要把各种套路、坑爹的细节全dou掰开揉碎, 蚌埠住了! 像老妈子炒菜一样把每一味配料撒进去,让你kan完后脑袋嗡嗡作响,却还Neng记住点儿真材实料。
一、 先别慌:Kafka 的“永不掉链子”到底是个啥玩意儿
Kafka 本身是个分布式日志系统,它把消息写进磁盘,磁盘嘛——永远是硬盘,不是内存。磁盘持久化是它防止数据在机器宕机时“啪”一下就消失的第一层保险。可是光靠磁盘也不行, 还得靠、ISR以及这些小技巧来双保险。

1️⃣ 副本——冗余的兄弟们
每个 Partition dou会有 N 个副本, 其中一个是 Leader,其他的是 Follower。只要 Leader 挂了 只要还有足够多的 Follower 在 ISR 队列里Kafka 就会选出新的 Leader,继续提供服务。 关键点:如guo你把 min.insync.replicas=2 配成两条, 那么即使只有两条副本同步成功,生产者仍然可yi写入,否则就会抛异常,我晕...。
2️⃣ ACKS = all —— “全员到齐才Neng走”
生产者端配置 acks=all意思是必须等suo有 ISR 中的副本dou确认写入成功后才算成功返回。这样即便 Leader 瞎了眼, 有啥用呢? 也不会导致消息丢失——主要原因是 Follower Yi经把数据刷到磁盘了。
二、 生产者侧的小技巧:幂等性 & 重试策略
我emo了。 幂等生产者从 0.11 起就来了它会给每条消息分配一个唯一的 producer.id 和递增的 sequence numberBroker 会检测重复并抛弃,从而避免因网络抖动导致的“重复投递”。

