熟悉Apache 大数据开发技术栈的朋友都知道 Kafka 在大数据开发中的作用,所以面试中会遇到相关问题 。
这个问题问的非常好,所以有必要记录一下 。对从事大数据开发的工程师来说也可以借鉴 。
Kafka通常用于两大类应用:
· 构建实时流数据管道,在系统或应用程序之间可靠地获取数据
· 构建转换或响应数据流的实时流应用程序
下图可以看到Kafka 可以用于应用程序与数据库之间消息流传递的桥梁,可用于软件服务系统,数据分析及监控系统 。
文章插图
Kafka消息队列的应用
所以传递消息的可靠性是其非常关键的特性,同时也是软件服务质量的保证 。
什么时候会丢数据能?
Kafka流媒体平台是发布和订阅消息的构架,类似于消息队列或企业消息传递系统 。
由 Producer(生产),Broker(存储)和(Consumer)消费三部分构成 。
文章插图
生产者与消费者
先看Producer 的特性怎么用会数据丢失呢?
1. 当属性中的确认(ACK)不是all 。
- acks = all -只有当所有消费者确认保存了消息时,才会返回ACK 。--不会丢
- acks = 1 -当leader消费者保存消息就返回ACK – 接收的leader如果确认后还没来得及备份就挂了丢数据
- acks = 0 -不等待任何确认 – 接收方有问题时候丢数据
因为如下图所示 producer 先把数据放buffer里面,而且是异步的 。Buffer里面的数据是内存中数据程序退出就没了 。所以记得用钩子
文章插图
Producer 中的 Buffer
下面是一个JAVA 8+关机钩子的例子:
文章插图
钩子例子
总结:
其实这个问题遇到过,但是面试时候只想到了checkpoint 没有想到这里 。
为什么呢?
只关注了自己最熟悉的方面来回答,并没有从系统构架上去思考 。
当我们把一个系统给它拆开分析的时候,就会有更多的思路,也就会有更全面的回答 。
还有没有其它情况会丢数据呢?待续 。
【面试题:Kafka消息队列会丢数据么?】
推荐阅读
- kafka面试题:Zookeeper 在 Kafka 中的作用
- 为你揭开玄空飞星风水神秘面纱
- 电饼铛坏了一面还能用吗?电饼铛什么牌子的好
- 螃蟹后面的一坨黄的是什么 螃蟹里面像鸡蛋黄一样的是什么
- 瓷砖表面崩瓷什么原因 瓷砖崩了一点缺口正常吗
- 梦见清水河里抓鱼 梦见清水河里面有很多鱼
- 一文搞懂 Java 线程中断
- 超市卖的全麦面包是真的吗 哪种全麦面包是真的
- 面试 前端面试这些API必须会手写
- 凉席怎样清洗 双面凉席怎么清洗