深度研究Kafka,读完面试直接过关斩将

充满寒气的互联网如何在面试中脱颖而出,平时积累很重要,八股文更不能少!下面带来的这篇 Kafka 问答希望能够在你的 offer 上增添一把🔥。

Kafka最初是由Linkedin公司开发的,是一个分布式的、可扩展的、容错的、支持分区的(Partition)、多副本的(replica)、基于Zookeeper框架的发布-订阅消息系统,Kafka适合离线和在线消息消费。它是分布式应用系统中的重要组件之一,也被广泛应用于大数据处理。Kafka是用Scala语言开发,它的Java版本称为Jafka。Linkedin于2010年将该系统贡献给了Apache基金会并成为顶级开源项目之一。

Kafka 是个大家伙,本篇将通过40道问答作为路线,由浅入深,最大程度上覆盖整个 Kafka 的问答内容(预习+复习一步到位)


1、Kafka 的设计

Kafka 将消息以 topic 为单位进行归纳,发布消息的程序称为 Producer,消费消息的程序称为 Consumer。它是以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个 Broker,Producer 通过网络将消息发送到 kafka 集群,集群向消费者提供消息,broker 在中间起到一个代理保存消息的中转站。

Kafka 中重要的组件

1)Producer: 消息生产者,发布消息到Kafka集群的终端或服务

2)Broker:一个 Kafka 节点就是一个 Broker,多个Broker可组成一个Kafka 集群。

如果某个 Topic 下有 n 个Partition 且集群有 n 个Broker,那么每个 Broker会存储该 Topic 下的一个 Partition

如果某个 Topic 下有 n 个Partition 且集群中有 m+n 个Broker,那么只有 n 个Broker会存储该Topic下的一个 Partition

如果某个 Topic 下有 n 个Partition 且集群中的Broker数量小于 n,那么一个 Broker 会存储该 Topic 下的一个或多个 Partition,这种情况尽量避免,会导致集群数据不均衡

3)Topic:消息主题,每条发布到Kafka集群的消息都会归集于此,Kafka是面向Topic 的

4)Partition:Partition 是Topic在物理上的分区,一个Topic可以分为多个Partition,每个Partition是一个有序的不可变的记录序列。单一主题中的分区有序,但无法保证主题中所有分区的消息有序。

5)Consumer:从Kafka集群中消费消息的终端或服务

6)Consumer Group:每个Consumer都属于一个Consumer Group,每条消息只能被Consumer Group中的一个Consumer消费,但可以被多个Consumer Group消费。

7)Replica:Partition 的副本,用来保障Partition的高可用性。

8)Controller: Kafka 集群中的其中一个服务器,用来进行Leader election以及各种 Failover 操作。

9)Zookeeper:Kafka 通过Zookeeper来存储集群中的 meta 消息

2、Kafka 性能高原因

  1. 利用了 PageCache 缓存
  2. 磁盘顺序写
  3. 零拷贝技术
  4. pull 拉模式

3、Kafka 文件高效存储设计原理

  1. Kafka把Topic中一个Partition大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完成的文件,减少磁盘占用
  2. 通过索引信息可以快速定位Message和确定response的最大大小
  3. 通过将索引元数据全部映射到 memory,可以避免 Segment 文件的磁盘I/O操作
  4. 通过索引文件稀疏存储,可以大幅降低索引文件元数据占用空间大小

4、Kafka 的优缺点

优点

  • 高性能、高吞吐量、低延迟:Kafka 生产和消费消息的速度都达到每秒10万级
  • 高可用:所有消息持久化存储到磁盘,并支持数据备份防止数据丢失
  • 高并发:支持数千个客户端同时读写
  • 容错性:允许集群中节点失败(若副本数量为n,则允许 n-1 个节点失败)
  • 高扩展性:Kafka 集群支持热伸缩,无须停机

缺点

  • 没有完整的监控工具集
  • 不支持通配符主题选择

5、Kafka 的应用场景

  1. 日志聚合:可收集各种服务的日志写入kafka的消息队列进行存储
  2. 消息系统:广泛用于消息中间件
  3. 系统解耦:在重要操作完成后,发送消息,由别的服务系统来完成其他操作
  4. 流量削峰:一般用于秒杀或抢购活动中,来缓冲网站短时间内高流量带来的压力
  5. 异步处理:通过异步处理机制,可以把一个消息放入队列中,但不立即处理它,在需要的时候在进行处理

6、Kafka 中分区的概念

主题是一个逻辑上的概念,还可以细分为多个分区,一个分区只属于单个主题,很多时候也会把分区称为主题分区(Topic-Partition)。同一主题下的不同分区包含的消息是不同的,分区在存储层面可以看做一个可追加的日志文件 ,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。offset 是消息在分区中的唯一标识,kafka 通过它来保证消息在分区内的顺序性,不过 offset 并不跨越分区,也就是说,kafka保证的是分区有序而不是主题有序。

在分区中又引入了多副本(replica)的概念,通过增加副本数量可以提高容灾能力。同一分区的不同副本中保存的是相同的消息。副本之间是一主多从的关系,其中主副本负责读写,从副本只负责消息同步。副本处于不同的 broker 中,当主副本出现异常,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值