Kafka基础及常见面试题

这篇具有很好参考价值的文章主要介绍了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文件分区,创建索引
10. Kafka怎么确定消息读取的有序性
1. 每个分区的消息读取是有序的,按照发送的顺序进行存储和读取
2. Kafka 还提供了顺序消费者(Sequential Consumer)功能,
    通过确保每个分区只有一个消费者来实现消息的全局有序性。
3. 可以给分区键加一定的逻辑,控制消息读取顺序
4. Kafka只能是分区内有序,因为设计的初衷就是为了高并发
    如果想给不同的分区设置读取顺序,可以考虑的点是设置单一分区。
    或者给消息添加序号或者时间戳,消费的时候按照这个逻辑控制顺序。
    或者所有有顺序要求的放到同一个分区里面

11. 常见的操作命令文章来源地址https://www.toymoban.com/news/detail-651059.html

Kafka 提供了丰富的命令行工具来执行各种操作,从创建主题到监控集群状态。以下是一些常见的 Kafka 操作及其对应的命令行示例:

1. **创建主题:**
   使用 `kafka-topics.sh` 命令创建主题。
   ```sh
   kafka-topics.sh --create --topic my-topic --partitions 3 --replication-factor 2 --bootstrap-server localhost:9092
   ```
    --partitions 3  创建3个分区
    --replication-factor 2   每个分区有2个副本


2. **查看主题列表:**
   使用 `kafka-topics.sh` 命令查看主题列表。
   ```sh
   kafka-topics.sh --list --bootstrap-server localhost:9092
   ```

3. **发送消息:**
   使用 `kafka-console-producer.sh` 命令发送消息。
   ```sh
   kafka-console-producer.sh --topic my-topic --broker-list localhost:9092
   ```
    输入命令后进入了输入框,输入完点击Enter完成
4. **消费消息:**
   使用 `kafka-console-consumer.sh` 命令消费消息。
   ```sh
   kafka-console-consumer.sh --topic my-topic --from-beginning --bootstrap-server localhost:9092
   ```

5. **查看消费者组消费情况:**
   使用 `kafka-consumer-groups.sh` 命令查看消费者组的消费情况。
   ```sh
   kafka-consumer-groups.sh --group my-group --describe --bootstrap-server localhost:9092
   ```

6. **查看集群状态:**
   使用 `kafka-topics.sh` 命令查看集群状态。
   ```sh
   kafka-topics.sh --describe --bootstrap-server localhost:9092
   ```

7. **添加分区:**
   使用 `kafka-topics.sh` 命令为主题添加分区。
   ```sh
   kafka-topics.sh --alter --topic my-topic --partitions 5 --bootstrap-server localhost:9092
   ```

8. **查看主题详细信息:**
   使用 `kafka-topics.sh` 命令查看特定主题的详细信息。
   ```sh
   kafka-topics.sh --describe --topic my-topic --bootstrap-server localhost:9092
   ```

9. **删除主题:**
   使用 `kafka-topics.sh` 命令删除主题。
   ```sh
   kafka-topics.sh --delete --topic my-topic --bootstrap-server localhost:9092
   ```

10. **创建 ACL(访问控制列表):**
    使用 `kafka-acls.sh` 命令创建 ACL 权限规则。
    ```sh
    kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:alice --operation Read --topic my-topic
    ```

这只是一些常见的 Kafka 操作示例,Kafka 提供了更多的命令行工具来执行其他操作,如管理 ACL、监控集群、更改配置等。你可以在 Kafka 官方文档中找到更多详细的命令和用法说明。

到了这里,关于Kafka基础及常见面试题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【分布式技术】消息队列Kafka

    目录 一、Kafka概述 二、消息队列Kafka的好处 三、消息队列Kafka的两种模式 四、Kafka 1、Kafka 定义 2、Kafka 简介 3、Kafka 的特性 五、Kafka的系统架构 六、实操部署Kafka集群  步骤一:在每一个zookeeper节点上完成kafka部署 ​编辑 步骤二:传给其他节点 步骤三:启动3个节点 kafka管理

    2024年01月23日
    浏览(42)
  • 分布式 - 消息队列Kafka:Kafka 消费者的消费位移

    01. Kafka 分区位移 对于Kafka中的分区而言,它的每条消息都有唯一的offset,用来表示消息在分区中对应的位置。偏移量从0开始,每个新消息的偏移量比前一个消息的偏移量大1。 每条消息在分区中的位置信息由一个叫位移(Offset)的数据来表征。分区位移总是从 0 开始,假设一

    2024年02月12日
    浏览(35)
  • 分布式 - 消息队列Kafka:Kafka消费者的分区分配策略

    Kafka 消费者负载均衡策略? Kafka 消费者分区分配策略? 1. 环境准备 创建主题 test 有5个分区,准备 3 个消费者并进行消费,观察消费分配情况。然后再停止其中一个消费者,再次观察消费分配情况。 ① 创建主题 test,该主题有5个分区,2个副本: ② 创建3个消费者CustomConsu

    2024年02月13日
    浏览(32)
  • 分布式 - 消息队列Kafka:Kafka生产者发送消息的方式

    不管是把Kafka作为消息队列、消息总线还是数据存储平台,总是需要一个可以往Kafka写入数据的生产者、一个可以从Kafka读取数据的消费者,或者一个兼具两种角色的应用程序。 Kafka 生产者是指使用 Apache Kafka 消息系统的应用程序,它们负责将消息发送到 Kafka 集群中的一个或多

    2024年02月13日
    浏览(32)
  • 分布式 - 消息队列Kafka:Kafka生产者架构和配置参数

    生产者发送消息流程参考图1: 先从创建一个ProducerRecord对象开始,其中需要包含目标主题和要发送的内容。另外,还可以指定键、分区、时间戳或标头。在发送ProducerRecord对象时,生产者需要先把键和值对象序列化成字节数组,这样才能在网络上传输。 接下来,如果没有显式

    2024年02月13日
    浏览(35)
  • 分布式 - 消息队列Kafka:Kafka消费者和消费者组

    1. Kafka 消费者是什么? 消费者负责订阅Kafka中的主题,并且从订阅的主题上拉取消息。与其他一些消息中间件不同的是:在Kafka的消费理念中还有一层消费组的概念,每个消费者都有一个对应的消费组。当消息发布到主题后,只会被投递给订阅它的每个消费组中的一个消费者

    2024年02月13日
    浏览(33)
  • 分布式 - 消息队列Kafka:Kafka 消费者消息消费与参数配置

    01. 创建消费者 在读取消息之前,需要先创建一个KafkaConsumer对象。创建KafkaConsumer对象与创建KafkaProducer对象非常相似——把想要传给消费者的属性放在Properties对象里。 为简单起见,这里只提供4个必要的属性:bootstrap.servers、key.deserializer 和 value.deserializer。 ① bootstrap.servers 指

    2024年02月12日
    浏览(31)
  • 分布式 - 消息队列Kafka:Kafka 消费者消费位移的提交方式

    最简单的提交方式是让消费者自动提交偏移量,自动提交 offset 的相关参数: enable.auto.commit:是否开启自动提交 offset 功能,默认为 true; auto.commit.interval.ms:自动提交 offset 的时间间隔,默认为5秒; 如果 enable.auto.commit 被设置为true,那么每过5秒,消费者就会自动提交 poll() 返

    2024年02月12日
    浏览(32)
  • 分布式 - 消息队列Kafka:Kafka生产者发送消息的分区策略

    01. Kafka 分区的作用 分区的作用就是提供负载均衡的能力,或者说对数据进行分区的主要原因,就是为了实现系统的高伸缩性。不同的分区能够被放置到不同节点的机器上,而数据的读写操作也都是针对分区这个粒度而进行的,这样每个节点的机器都能独立地执行各自分区的

    2024年02月13日
    浏览(38)
  • 分布式 - 消息队列Kafka:Kafka消费者分区再均衡(Rebalance)

    01. Kafka 消费者分区再均衡是什么? 消费者群组里的消费者共享主题分区的所有权。当一个新消费者加入群组时,它将开始读取一部分原本由其他消费者读取的消息。当一个消费者被关闭或发生崩溃时,它将离开群组,原本由它读取的分区将由群组里的其他消费者读取。 分区

    2024年02月12日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包