Kafka 面试题

Article description.

概念

  • Broker : 一个 Kafka 节点就是一个 Broker
  • Consumer Group:每个Consumer都属于一个Consumer Group,每条消息只能被Consumer Group中的一个Consumer消费,但可以被多个Consumer Group消费。
  • Controller: Kafka 集群中的其中一个服务器,用来进行Leader election以及各种 Failover 操作。

使用场景

  • 日志收集
  • 消息队列(系统解耦,通过消息交互,异步处理)

Kafka 性能高原因

  • 磁盘顺序读写,使用PageCache 缓存
  • 零拷贝技术(发送使用sendfile,index使用mmap,log不用)
  • Kafka支持批量读写和批量压缩,减少了网络传输的延迟和带宽开销。

Kafka 文件高效存储设计原理

  • Kafka把Topic中一个Partition大文件分成多个小文件段
  • 索引文件稀疏存储,减少索引占用空间
  • 索引元数据全部映射到 memory,可以避免 Segment 文件的磁盘I/O操作

Kafka 的优缺点

优点

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

Kafka 写入过程

  • 封装成一个 ProducerRecord 对象,然后序列化
  • 对消息进行分区处理
  • 放入生产者的缓存区,多条消息会被封装成一个批次(Batch),默认一个批次的大小是 16KB
  • Sender 线程启动以后会从缓存里面去获取可以发送的批次,分批发送

Kafka 读取过程

  • 使用pull模式

负载均衡与故障转移

负载均衡

通过选举选出leader,读写分散到不同的partition。

故障转移

每台 Kafka 服务器启动后会以会话的形式把自己注册到 Zookeeper 服务器上,如果故障会断连,触发迁移。

???迁移逻辑

Kafka 创建Topic后如何将分区放置到不同的 Broker 中

Kafka创建Topic将分区放置到不同的Broker时遵循以下规则:

  1. 副本因子不能大于Broker的个数。
  2. 第一个分区(编号为0)的第一个副本放置位置是随机从Broker List中选择的。
  3. 其他分区的第一个副本放置位置相对于第0个分区依次往后移。也就是如果有3个Broker,3个分区,假设第一个分区放在第二个Broker上,那么第二个分区将会放在第三个Broker上;第三个分区将会放在第一个Broker上,更多Broker与更多分区依此类推。剩余的副本相对于第一个副本放置位置其实是由nextReplicaShift决定的,而这个数也是随机产生的。

参考

https://javabetter.cn/interview/kafka-40.html

updatedupdated2023-12-082023-12-08