Kafka高频面试22连问
1、为什么要使用 kafka,为什么要使用消息队列?
- 缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理。
- 解耦和扩展性:项目开始的时候,并不能确定具体需求。消息队列可以作为一个接口层,解耦重要的业务流程。只需要遵守约定,针对数据编程即可获取扩展能力。
- 冗余:可以采用一对多的方式,一个生产者发布消息,可以被多个订阅topic的服务消费到,供多个毫无关联的业务使用。
- 健壮性:消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正常进行。
- 异步通信:很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。
2、Kafka的常用组件有哪些?
producer:消息的生产者, 自己决定哪个 partions 中生产消息, 两种机制:hash 与 轮询。consumer:通过 zookeeper 进行维护消费者偏移量, consumer有自己的消费组,不同组之间维护同一个 topic 数据,互不影响.相同组的不同 consumer消费同一个 topic,这个 topic相同的数据只被消费一次。broker:broker 组成 kafka 集群的节点,之间没有主从关系, 依赖 zookeeper进行协调, broker 负责消息的读写与存储, 一个 broker可以管理读个 partionstopic:一类消息的总称/消息队里, topic是由 partions组成, 一个 topic 由多台 server 里的 partions 组成。zookeeper 协调 kafka broker,存储元数据, consumer的 offset+ broker 信息 +topic信息+ partions信息partions 组成 topic 的单元, 每个 topic有副本(创建 topic 指定), 每个 partions 只能有有个 broker管理
3、数据传输的事物定义有哪三种?
数据传输的事务定义通常有以下三种级别:
- 最多一次: 消息不会被重复发送,最多被传输一次,但也有可能一次不传输。
- 最少一次: 消息不会被漏发送,最少被传输一次,但也有可能被重复传输。
- 精确的一次(Exactly once): 不会漏传输也不会重复传输,每个消息都传输被一次而 且仅仅被传输一次,这是大家所期望的。
4、ZooKeeper在Kafka中的作用是什么?
Apache Kafka是一个使用Zookeeper构建的分布式系统。虽然,Zookeeper的主要作用是在集群中的不同节点之间建立协调。但是,如果任何节点失败,我们还使用Zookeeper从先前提交的偏移量中恢复,因为它做周期性提交偏移量工作。
5、没有ZooKeeper可以使用Kafka吗?
zookeeper 是一个分布式的协调组件,早期版本的kafka用zk做meta信息存储,consumer的消费状态,group的管理以及 offset的值。考虑到zk本身的一些因素以及整个架构较大概率存在单点问题,新版本中逐渐弱化了zookeeper的作用。新的consumer使用了kafka内部的group coordination协议,也减少了对zookeeper的依赖。但是broker依然依赖于ZK,zookeeper 在kafka中还用来选举controller 和 检测broker是否存活等等。
6、Kafka 判断一个节点是否还活着有那两个条件?
7、解释偏移的作用。
8、producer 是否直接将数据发送到 broker 的 leader(主节点)?
9、Kafa consumer 是否可以消费指定分区消息?
10、Kafka 存储在硬盘上的消息格式是什么?
11、kafka follower如何与leader同步数据?
12、Kafka 高效文件存储设计特点:
13、Kafka 与传统消息系统之间有三个关键区别
14、Kafka为什么那么快?
15、什么情况下一个 broker 会从 isr中踢出去?
16、kafka producer如何优化打入速度?
17、kafka producer 打数据,ack 为 0, 1, -1 的时候代表啥(ack机制), 设置 -1 的时候,什么情况下,leader 会认为一条消息 commit了?
18、Kafka中的消息是否会丢失和重复消费?
19、为什么Kafka不支持读写分离?
20、Kafka中是怎么体现消息顺序性的?
21、消费者提交消费位移时提交的是当前消费到的最新消息的offset还是offset+1?
22、kafka如何实现延迟队列?