Kafka基础及常见面试题

  1. 用途

    1. 流量削峰
    2. 流计算
  2. Kafka的核心组件

    在Kafka中,Producer、Broker和Consumer是三个关键的角色,它们在整个消息传递过程中扮演不同的角色和功能:

    1. Producer(生产者):
      生产者是消息的发送方,负责将消息发布到Kafka的主题(Topic)中。生产者将消息发送给Kafka集群中的一个或多个Broker,然后由Broker将消息持久化并进行分发。生产者可以根据业务需求配置消息的发送策略,例如同步发送、异步发送等。

    2. Broker(代理服务器):
      Broker是Kafka集群中的中间服务器,负责接收、存储和分发消息。每个Broker都有自己的存储空间,将消息以分区(Partition)的方式存储在本地磁盘上。Broker负责管理主题的元数据、分区的分布和复制,以及处理生产者和消费者的请求。多个Broker组成的集群共同构成了一个高可用、分布式的消息传递平台。

    3. Consumer(消费者):
      消费者是消息的接收方,负责从Kafka的主题中订阅消息并进行消费。消费者从Broker中拉取(Pull)消息,可以控制消息的消费进度和速率。消费者可以以不同的消费者组(Consumer Group)身份订阅同一个主题,这样可以实现消息的广播或分组消费。

    综合起来,Producer负责将消息发布到Kafka,Broker负责存储和分发消息,而Consumer负责订阅和消费消息。这三个角色共同构成了Kafka的核心组件,使得Kafka能够实现高性能、高可用的消息传递和处理。

  3. Kafka中Topic的概念

    消息类别,Kafka按照topic来分类消息

    Topic是对消息的分类,属于Producer(生产者)和Consumer(消费者)之间的概念

    Producer会把消息接受到特定的Producer,Broker会管理和分配这些消息。
    Consumer会从Consumer特定的区域请求拿到属于他的topic消息,然后进行消费。
    消费完成之后使用offset标记

  4. kafka维护消息状态的跟踪方法

    Kafka中的Topic会被分为若干分区,每个分区同一时间只能被一个consumer消费
    consumer消费之后会把消息offset标记,通过位置偏移来追踪消费状态

  5. zookeeper 对于 kafka 的作用是什么

    1. Zookeeper在kafka集群中用于节点之间的通信
    2. Zookeeper用于管理consumer提交的偏移消息
    3. Consumer提交offset消息过程:
      1. Consumer用自己特有的偏移量把消费后的消息提交给Zookeeper,这个过程异步
      2. Zookeeper保存偏移后的消息到自己的数据结构里面
      3. 如果Consumer故障后重启,可以向Zookeeper查询上次提交偏移的位置,从而消费后续的消息。
        避免了数据的重复或丢失
  6. kafka 判断一个节点还活着的有那两个条件

    1. 节点和Zookeeper保持链接,Zookeeper会不定时发送心跳的探测
    2. 如果follow节点,需要定时同步master的同步消息
  7. kafka 如何不消费重复数据

    1. 首先应该从消息源确定,Producer收到发送给Broker的消息都有唯一的Id,保障幂等性。
    2. 幂等性保证了即使生产者在发送消息的过程中发生了重试,同一条消息也只会被成功写入一次。无论生产者发送消息多少次,只要消息内容相同,只有一次会被写入。
  8. kafka 如何实现数据的高效读取

    1. 对不同topic进行分区,分区之后可以被多个Consumer同时并行获取处理
    2. 每个分区都维护了高效的索引
    3. 副本机制:每个分区都可以有自己的多个副本,副本允许被读取
    4. Consumer读取消息后offset是异步给Zookeeper保存,可以继续执行其他消息处理步骤
    5. 零拷贝:kafka的数据传输使用零拷贝技术,避免资源浪费

    零拷贝和传统拷贝的区别:
    传统是内核态和用户之间的拷贝,而零拷贝直接在设备和内存空间拷贝
    在零拷贝技术中,数据传输的过程中数据不再需要从内核缓冲区拷贝到用户缓冲区,而是直接在内核和设备之间传输,避免了中间的拷贝操作。这种方式可以显著减少CPU的开销,提高数据传输的速度,并降低系统负担。

9. Kafka的那些设计让它有如此高的性能

复制代码
1. 使用分布式消息队列
2. 使用零拷贝模式
3. 对log文件分区,创建索引
相关推荐
Alluxio17 小时前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型
阿卡好可爱1 天前
Lua 热更新不生效:改完文件线上仍是旧逻辑,package.loaded 与 upvalue 重绑定详解
数据结构·分布式·后端·架构·lua
我不会起名字3222 天前
消费回调固定 return nil:错误传播与 Kafka 位点提交的区别
后端·mongodb·kafka·go·im·故障排查
qq_452396232 天前
第十篇:《Kafka 安全加固:SASL、SSL、ACL 与多租户隔离》
安全·kafka·ssl
用户3610588626123 天前
KafkaProducer 元数据管理:send() 卡住时,它在等什么
kafka
方方洛3 天前
ray教程-28-附录G-CICD与Slurm与云上调度
人工智能·分布式·机器学习
空奈qwq3 天前
【Kafka 从入门到实战】从手写一个队列到生产级消息中间件:架构、分区、消费组、零拷贝全解析
分布式·架构·kafka
山甫aa4 天前
锁一篇搞定:乐观锁、悲观锁、CAS、数据库锁与分布式锁【从零开始的 Web 后端学习】
java·数据库·分布式·后端·学习·web
严肃小白兔5 天前
Cloudflare Durable Objects 支持自动重试:分布式调用如何避免重复执行?
分布式