合 Kafka常见面试题
- Apache Kafka 是什么?
- 为什么要使用 kafka,为什么要使用消息队列
- kafka 为什么那么快
- Kafka 高效文件存储设计特点
- Kafka 与传统消息系统之间有三个关键区别
- 流 API 的作用是什么?
- Kafka 的流处理是什么意思?
- 什么是消费者组?
- 如何获取 topic 主题的列表
- kafka producer如何优化打入速度增加线程
- kafka producer 打数据,ack 为 0, 1, -1 的时候代表啥, 设置 -1 的时候,什么情况下,leader 会认为一条消息 commit了
- 在 Kafka 中,ZooKeeper 的作用是什么?
- kafka中的broker 是干什么的
- Kafka 中位移(offset)的作用
- Kafka 判断一个节点是否还活着有哪两个条件?
- 阐述下 Kafka 中的领导者副本(Leader Replica)和追随者副本 (Follower Replica)的区别
- kafka follower如何与leader同步数据
- 如何设置 Kafka 能接收的最大消息的大小?
- 监控 Kafka 的框架都有哪些?
- Broker 的 Heap Size 如何设置?
- 如何估算 Kafka 集群的机器数量?
- Leader 总是 -1,怎么破?
- LEO、LSO、AR、ISR、HW 都表示什么含义?
- 什么情况下一个 broker 会从 isr中踢出去
- 如果leader crash时,ISR为空怎么办
- Kafka 能手动删除消息吗?
- __consumer_offsets 是做什么用的?
- 分区 Leader 选举策略有几种?
- Kafka 的哪些场景中使用了零拷贝(Zero Copy)?
- Kafka 为什么不支持读写分离?
- 如何调优 Kafka?
- Controller 发生网络分区(Network Partitioning)时,Kafka 会怎 么样?
- Java Consumer 为什么采用单线程来获取消息?
- 简述 Follower 副本消息同步的完整流程
- Kafka中的消息是否会丢失和重复消费?
- Kafka中是怎么体现消息顺序性的?
- 消费者提交消费位移时提交的是当前消费到的最新消息的offset还是offset+1?
- partition 的数据如何保存到硬盘
- Kafka 存储在硬盘上的消息格式是什么?
- 讲讲 kafka 维护消费状态跟踪的方法
- 参考
Apache Kafka 是什么?
Apach Kafka 是一款分布式流处理框架,用于实时构建流处理应用。它有一个核心 的功能广为人知,即作为企业级的消息引擎被广泛使用。
为什么要使用 kafka,为什么要使用消息队列
- 缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理。
- 解耦和扩展性:项目开始的时候,并不能确定具体需求。消息队列可以作为一个接口层,解耦重要的业务流程。只需要遵守约定,针对数据编程即可获取扩展能力。
- 冗余:可以采用一对多的方式,一个生产者发布消息,可以被多个订阅topic的服务消费到,供多个毫无关联的业务使用。
- 健壮性:消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正常进行。
- 异步通信:很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。
kafka 为什么那么快
- Cache Filesystem Cache PageCache缓存
- 顺序写 由于现代的操作系统提供了预读和写技术,磁盘的顺序写大多数情况下比随机写内存还要快。
- Zero-copy 零拷技术减少拷贝次数
- Batching of Messages 批量量处理。合并小的请求,然后以流的方式进行交互,直顶网络上限。
- Pull 拉模式 使用拉模式进行消息的获取消费,与消费端处理能力相符。
Kafka 高效文件存储设计特点
(1).Kafka 把 topic 中一个 parition 大文件分成多个小文件段,通过多个小文件段,就容易定
期清除或删除已经消费完文件,减少磁盘占用。
(2).通过索引信息可以快速定位 message 和确定 response 的最大大小。
(3).通过 index 元数据全部映射到 memory,可以避免 segment file 的 IO 磁盘操作。
(4).通过索引文件稀疏存储,可以大幅降低 index 文件元数据占用空间大小。
Kafka 与传统消息系统之间有三个关键区别
(1).Kafka 持久化日志,这些日志可以被重复读取和无限期保留
(2).Kafka 是一个分布式系统:它以集群的方式运行,可以灵活伸缩,在内部通过复制数据
提升容错能力和高可用性
(3).Kafka 支持实时的流式处理
流 API 的作用是什么?
一种允许应用程序充当流处理器的 API,它还使用一个或多个主题的输入流,并生成一个输
出流到一个或多个输出主题,此外,有效地将输入流转换为输出流,我们称之为流 API。
Kafka 的流处理是什么意思?
连续、实时、并发和以逐记录方式处理数据的类型,我们称之为 Kafka 流处理。
什么是消费者组?
1、定义:即消费者组是 Kafka 提供的可扩展且具有容错性的消费者机制。
2、原理:在 Kafka 中,消费者组是一个由多个消费者实例 构成的组。多个实例共同订阅若干个主题,实现共同消费。同一个组下的每个实例都配置有 相同的组 ID,被分配不同的订阅分区。当某个实例挂掉的时候,其他实例会自动地承担起 它负责消费的分区。
此时,又有一个小技巧给到你:消费者组的题目,能够帮你在某种程度上掌控下面的面试方
向。
- 如果你擅长位移值原理,就不妨再提一下消费者组的位移提交机制;
- 如果你擅长 Kafka Broker,可以提一下消费者组与 Broker 之间的交互;
- 如果你擅长与消费者组完全不相关的 Producer,那么就可以这么说:“消费者组要消 费的数据完全来自于 Producer 端生产的消息,我对 Producer 还是比较熟悉的。”
如何获取 topic 主题的列表
bin/kafka-topics.sh --list --zookeeper localhost:2181
kafka producer如何优化打入速度增加线程
- 提高 batch.size
- 增加更多 producer 实例
- 增加 partition 数
- 设置 acks=-1 时,如果延迟增大:可以增大 num.replica.fetchers(follower 同步数据的线程数)来调解;
- 跨数据中心的传输:增加 socket 缓冲区设置以及 OS tcp 缓冲区设置。
kafka producer 打数据,ack 为 0, 1, -1 的时候代表啥, 设置 -1 的时候,什么情况下,leader 会认为一条消息 commit了
- 1(默认) 数据发送到Kafka后,经过leader成功接收消息的的确认,就算是发送成功了。在这种情况下,如果leader宕机了,则会丢失数据。
- 0 生产者将数据发送出去就不管了,不去等待任何返回。这种情况下数据传输效率最高,但是数据可靠性确是最低的。
- -1 producer需要等待ISR中的所有follower都确认接收到数据后才算一次发送完成,可靠性最高。当ISR中所有Replica都向Leader发送ACK时,leader才commit,这时候producer才能认为一个请求中的消息都commit了。
在 Kafka 中,ZooKeeper 的作用是什么?
目前,Kafka 使用 ZooKeeper 存放集群元数据、成员管理、Controller 选举,以及其他一些管理类任务。之后,等 KIP-500 提案完成后,Kafka 将完全不再依赖 于 ZooKeeper。
“存放元数据”是指主题 分区的所有数据都保存在 ZooKeeper 中,且以它保存的数据为权威,其他“人”都要与它 保持对齐。“成员管理”是指 Broker 节点的注册、注销以及属性变更,等 等。“Controller 选举”是指选举集群 Controller,而其他管理类任务包括但不限于主题 删除、参数配置等。
不过,抛出 KIP-500 也可能是个双刃剑。碰到非常资深的面试官,他可能会进一步追问你 KIP-500 是做的。一言以蔽之:KIP-500 思想,是使用社区自研的基于 Raft 的共识算法, 替代 ZooKeeper,实现 Controller 自选举。
kafka中的broker 是干什么的
broker 是消息的代理,Producers往Brokers里面的指定Topic中写消息,Consumers从Brokers里面拉取指定Topic的消息,然后进行业务处理,broker在中间起到一个代理保存消息的中转站。