小白学技术之分布式流事件处理平台Kafka

小白学技术之分布式流事件处理平台Kafka

精选文章moguli202025-04-03 22:08:0925A+A-

小白学技术,用简单的方式做有效的事!


Kafka是什么

Kafka是分布式流事件处理平台,核心功能包括消息队列、流处理

消息队列的优点

  1. 异步:异步是相对于同步而言的,对于异步来说,任务可以是非线性的,下一个任务的开始不需要等待上一个任务的完成,不同的任务可以互不干扰地进行。在kafka中,生产者发送消息时,将消息放入缓冲区后,无需等待kafka的确认,便可以执行任务的后续操作,由专门的线程进行批量发送;消费者从kafka拉取消息后,可将消息交给独立线程处理,消费者线程继续拉取新的消息,异步处理,提高效率
  2. 解耦:降低系统之间的耦合度,使多个组件、系统可以独立的部署、运行,互不干扰
  3. 削峰:降低流量的冲击,在流量高峰时,对流量进行缓冲和处理,避免系统因瞬间的高流量而崩溃

Kafka的特点

  1. 高吞吐量:Kafka 采用了批量发送、异步发送等技术,能够在短时间内处理大量的消息,其吞吐量可以达到每秒数十万级
  2. 高可用:分布式集群,一个数据会有多个备份
  3. 实时性高:延迟一般在ms级

Kafka的适用场景

通过其特点可以看出Kafka适用于数据量大的场景(高吞吐),比如日志系统;消息需要实时传输的场景(实时性高),比如IOT场景下的数据上报、故障上报

Kafka的组成

  1. Zookeeper:Kafka的注册中心,用于注册和选举
  2. Broker:kafka的服务节点,负责接收生产者的消息,存储消息,为消息消费者提供读取消息服务,一个kafka集群由多个broker组成
  3. Producer:消息生产者,将消息数据推送到topic中
  4. Consumer:消息消费者,从kafka中读取消息数据,消费者可以订阅一个或多个topic,并按照一定顺序读取主题中的消息
  5. Topic:主题,kafka中消息的逻辑分类,每个主题可以拥有多个Partition分区,不同的分区可以存放在不同的broker上

Kafka的工作流程

  1. 消息生产:生产者根据指定的主题和分区策略,将消息发送到 Kafka 集群中的 Broker。生产者可以选择将消息发送到特定的分区,也可以让 Kafka 根据消息的键(Key)或轮询等策略自动分配到不同的分区
  2. 消息存储:Broker 接收到生产者发送的消息后,会将消息追加到相应分区的日志文件中。Kafka 通过分段存储和索引机制,能够高效地存储和查询大量的消息
  3. 消息消费:消费者向 Kafka 集群发送拉取请求,获取订阅主题中的消息。消费者会记录自己消费到的偏移量(Offset),表示已经消费到的消息位置。下次拉取消息时,会从上次记录的偏移量处开始拉取,保证消息的顺序消费和不重复消费

Kafka集群架构

  1. 分区(Partition):每个 Topic 可以分为多个 Partition,这是 Kafka 实现高并发和分布式存储的关键。每个 Partition 是一个有序的、不可变的消息序列,消息在 Partition 中按照顺序存储。不同的 Partition 可以分布在不同的 Broker 上,从而实现数据的并行处理和负载均衡
  2. 副本(Replica):为了保证数据的可靠性和高可用性,Kafka 为每个 Partition 提供了多个副本,包括一个领导者副本(Leader Replica)和多个追随者副本(Follower Replica)。生产者发送的消息会首先发送到 Leader 副本,然后 Follower 副本会从 Leader 副本同步数据。当 Leader 副本所在的 Broker 出现故障时,Kafka 会自动从 Follower 副本中选举出一个新的 Leader,保证数据的正常读写
  3. 消费者组(Consumer Group):多个消费者可以组成一个消费者组,共同消费一个或多个主题中的消息。每个分区在同一个消费者组中只能被一个消费者消费,这样可以实现消费者之间的负载均衡。不同的消费者组之间可以独立地消费同一个主题的消息,互不影响,方便不同的应用场景对同一批数据进行不同的处理

Kafka的性能(支撑高吞吐、低延迟)

  1. 顺序读写:Kafka 充分利用了磁盘的顺序读写特性,将消息顺序地写入到日志文件中,大大提高了写入性能。在读取消息时,也可以通过顺序读取索引文件和日志文件来提高读取效率
  2. 零拷贝技术:Kafka 在数据传输过程中采用了零拷贝技术,避免了数据在用户空间和内核空间之间的多次拷贝,减少了 CPU 和内存的开销,提高了数据传输的效率
  3. 缓存机制:Kafka 使用了多种缓存机制来提高性能,如页缓存(Page Cache)、内存映射文件(Memory-Mapped Files)等。页缓存可以缓存磁盘上的部分数据,减少磁盘 I/O 操作;内存映射文件可以将磁盘文件映射到内存中,通过操作内存来实现对文件的读写,提高了读写速度

Kafka安装

Linux/ubuntu

  1. 下载:wget https://dlcdn.apache.org/kafka/3.9.0/kafka_2.12-3.9.0.tgz
  2. 解压:tar -zxvf kafka_2.13-3.4.0.tgz
  3. 可选-移动位置:sudo mv kafka_2.13-3.4.0 /opt/kafka
  4. 为方便使用kafka命令,配置环境变量,编辑`~/.bashrc`
# 末尾添加
export KAFKA_HOME=/opt/kafka
export PATH=$PATH:$KAFKA_HOME/bin
# 生效
source ~/.bashrc
  1. 启动zookeeper(kafka自带)

zookeeper-server-start.sh $KAFKA_HOME/config/zookeeper.properties &

  1. 启动kafka服务器

kafka-server-start.sh $KAFKA_HOME/config/server.properties &

  1. 验证kafka

创建一个主题:

kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

向test-topic主题发送消息:kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092

打开新的终端,启动消费者,从test-topic获取消息:kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092

  1. 停止服务
kafka-server-stop.sh
zookeeper-server-stop.sh
  1. 注意事项
# 可能需要开放端口
sudo ufw allow 9092 kafka
sudo ufw allow 2181 zookeeper

windows

  1. 安装同上
  2. 启动zookeeper

.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties

  1. 启动kafka

.\bin\windows\kafka-server-start.bat .\config\server.properties

不同消息队列的对比

ActiveMQ

RabbitMQ

RocketMQ

Kafka

吞吐量

万级

万级

十万级

十万级

实时性

毫秒级

微秒级

毫秒级

毫秒级

topic数量对吞吐量的影响



topic数量从几百到几千对吞吐量影响不大同等配置下支持topic数量最多

topic数量从几十到几百,吞吐量就会大幅度下降,同等配置下,kafka的topic数量不要过多

系统可用性

主从架构

主从架构

分布式架构

分布式架构,数据多副本

消息可靠性

较低概率丢失

基本不丢失

通过配置可实现不丢失

通过配置可实现不丢失

系统功能性

MQ领域的功能十分完善

延迟低、并发好

MQ功能较为完善

MQ功能一般,主要用于实时性、数据量大的场景,比如日志系统

点击这里复制本文地址 以上内容由莫古技术网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

莫古技术网 © All Rights Reserved.  滇ICP备2024046894号-2