面试题--kafka

Kafka 是什么?

Kafka 是一款分布式流处理框架,用于实时构建流处理应用。它有一个核心 的功 能广为人知,即作为企业级的消息引擎被广泛使用。 你一定要先明确它的流处理框架地位,这样能给面试官留 下一个很专业的印象。

Kafka 的特点?

高吞吐量、低延迟:kafka 每秒可以处理几十万条消息,它的延迟最低只有几毫秒 可扩展性:kafka 集群支持热扩展 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失 容错性:允许集群中节点失败(若副本数量为 n,则允许 n-1 个节点失败) 高并发:支持数千个客户端同时读写

什么是消费者组?

消费者组是 Kafka 独有的概念,如果面试官问这 个,就说明他对此是有一定了解 的。我先给出标准答案: 1、定义:即消费者组是 Kafka 提供的可扩展且具有容错性的消费者机制。 2、原理:在 Kafka 中,消费者组是一个由多个消费者实例 构成的组。多个实例共同订阅 若干个主题,实现共同消费。同一个组下的每个实例都配置有 相同的组 ID,被分配不同 的订阅分区。当某个实例挂掉的时候,其他实例会自动地承担起 它负责消费的分区。此时,又有一个小技巧给到你:消费者组的题目,能够帮你在某种程度上掌控下面的 面试方向。 如果你擅长位移值原理,就不妨再提一下消费者组的位移提交机制; 如果你擅长 Kafka Broker,可以提一下消费者组与 Broker 之间的交互; 如果你擅长与消费者组完全不相关的 Producer,那么就可以这么说:"消费者组要 消 费的数据完全来自于 Producer 端生产的消息,我对 Producer 还是比较熟 悉的。"

Kafka 中,ZooKeeper 的作用是什么?

这是一道能够帮助你脱颖而出的题目。碰到这个题目,请在心中暗笑三声。 目前,Kafka 使用 ZooKeeper 存放集群元数据、成员管理、Controller 选举,以及 其他一些管理类任务。之后,等 KIP-500 提案完成后,Kafka 将完全不再依赖 于 ZooKeeper。 记住,一定要突出"目前",以彰显你非常了解社区的演进计划。"存放元数据" 是指主题 分区的所有数据都保存在 ZooKeeper 中,且以它保存的数据为权威,其他"人" 都要与它 保持对齐。"成员管理"是指 Broker 节点的注册、注销以及属性变更,等 等。 "Controller 选举"是指选举集群 Controller,而其他管理类任务包括但不限于主题 删除、 参数配置等。 不过,抛出 KIP-500 也可能是个双刃剑。碰到非常资深的面试官,他可能会进一步 追问你 KIP-500 是做的。一言以蔽之:KIP-500 思想,是使用社区自研的基于 Raft 的共识算 法, 替代 ZooKeeper,实现 Controller 自选举。

如何估算 Kafka 集群的机器数量?

这道题目考查的是机器数量和所用资源之间的关联关系。所谓资源,也就是 CPU、 内存、磁盘和带宽。 通常来说,CPU 和内存资源的充足是比较容易保证的,因此,你需要从磁盘空间和 带宽占用两个维度去评估机器数量。 在预估磁盘的占用时,你一定不要忘记计算副本同步的开销。如果一条消息占用 1KB 的磁 盘空间,那么,在有 3 个副本的主题中,你就需要 3KB 的总空间来保存这条消 息。显式地 将这些考虑因素答出来,能够彰显你考虑问题的全面性,是一个难得的加分项。 对于评估带宽来说,常见的带宽有 1Gbps 和 10Gbps,但你要切记,这两个数字仅 仅是最大值。因此,你最好和面试官确认一下给定的带宽是多少。然后,明确阐述出当带宽 占用接 近总带宽的 90% 时,丢包情形就会发生。这样能显示出你的网络基本功。

Kafka 为什么不支持读写分离?

这道题目考察的是你对 Leader/Follower 模型的思考。 Leader/Follower 模型并没有规定 Follower 副本不可以对外提供读服务。很多框架 都是允 许这么做的,只是 Kafka 最初为了避免不一致性的问题,而采用了让 Leader 统一 提供服 务的方式。 不过,在开始回答这道题时,你可以率先亮出观点:自 Kafka 2.4 之后,Kafka 提供 了有限度的读写分离,也就是说,Follower 副本能够对外提供读服务。 说完这些之后,你可以再给出之前的版本不支持读写分离的理由。 场景不适用:读写分离适用于那种读负载很大,而写操作相对不频繁的场景,可 Kafka 不属于这样的场景。157 同步机制:Kafka 采用 PULL 方式实现 Follower 的同步,因此,Follower 与 Leader 存 在不一致性窗口。如果允许读 Follower 副本,就势必要处理消息滞后(Lagging)的问题。

写在最后:kafka也是一款中间件,最近博主会更多的分享一些中间件相关文章,最近自身工作也接触到了很多中间件,慢慢会与大家分享。博主小,中,大厂均有面试经验,每日分享Java全栈开发知识,希望能够和大家共同进步。

相关推荐
手握风云-10 分钟前
数据结构(Java版)第一期:时间复杂度和空间复杂度
java·数据结构
坊钰13 分钟前
【Java 数据结构】时间和空间复杂度
java·开发语言·数据结构·学习·算法
痞老板A小安装C419 分钟前
redis的大key和热key问题解决方案
数据库·redis·bootstrap
飞升不如收破烂~19 分钟前
Redis的String类型和Java中的String类在底层数据结构上有一些异同点
java·数据结构·redis
feilieren22 分钟前
DataGrip 连接 Redis、TongRDS
数据库·redis·缓存
苹果酱056723 分钟前
windows安装redis, 修改自启动的redis服务的密码
java·开发语言·spring boot·mysql·中间件
液态不合群25 分钟前
Redis中常见的数据类型及其应用场景
数据库·redis·wpf
孙克旭_25 分钟前
第三章 分布式缓存Redis
redis·分布式·缓存
Allen Bright25 分钟前
Jedis存储一个-以String的形式的对象到Redis
数据库·redis·缓存
feilieren27 分钟前
信创改造 - TongRDS 替换 Redis
java·spring boot·后端