Kafka消息队列

目录

Kafka消息队列

核心特性

技术架构 

优劣势分析

zookeeper概述

核心特性

工作原理

优劣势

zookeeper集群架构

ZooKeeper在Kafka中的核心作用

 案例:分布部署


Kafka消息队列

Kafka消息队列是一种高性能、分布式、可扩展的流处理平台,专为处理大规模实时数据而设计

核心特性

  1. 高吞吐量与低延迟
    • 每秒可处理数百万条消息,延迟控制在毫秒级,适合实时数据流处理。
    • 采用批量发送和零拷贝技术,减少网络和磁盘I/O开销。
  2. 持久化与容错性
    • 消息持久化存储在磁盘,支持配置保留时间(如7天或永久),避免数据丢失。
    • 通过多副本机制(默认副本因子为3)实现高可用,允许部分节点故障而不影响服务。
  3. 可扩展性
    • 支持水平扩展,通过增加Broker节点和分区(Partition)提升吞吐量。
    • 分区设计允许并行处理,每个分区可独立分配给不同消费者。
  4. 消费者组与负载均衡
    • 消费者组(Consumer Group)内的消费者共享分区,实现负载均衡。
    • 一个分区只能被一个消费者组内的消费者消费,避免重复处理。
  5. 顺序保证
    • 单个分区内的消息严格按顺序存储和消费,适合需要有序处理的场景(如订单处理)。

技术架构 

  1. 核心组件
    • Broker:Kafka集群中的节点,负责消息存储和转发。
    • Topic:消息分类的逻辑单元,可划分为多个分区。
    • Partition:分区的物理存储单元,每个分区是一个有序的日志文件。
    • Producer:消息生产者,将消息发送到指定Topic的分区。
    • Consumer:消息消费者,从Topic的分区拉取消息。
  2. 消息存储机制
    • 消息以追加方式写入分区日志文件,支持压缩(如Snappy、LZ4)减少存储开销。
    • 通过索引文件快速定位消息,支持高效随机读取。
  3. 副本与同步机制
    • 每个分区有Leader和Follower副本,Leader处理读写请求,Follower同步数据。
    • 使用ISR(In-Sync Replica)机制确保数据一致性,避免脑裂问题。

优劣势分析

  1. 优势
    • 高性能:支持高吞吐量和低延迟,适合大规模实时数据处理。
    • 可扩展性:水平扩展简单,分区设计支持并行处理。
    • 持久化与容错:消息持久化存储,多副本机制保证高可用。
    • 灵活性:支持多种消费模式(如拉取、推送)和流处理框架集成。
  2. 劣势
    • 复杂性:配置和管理较复杂,需处理分区分配、副本同步等问题。
    • 顺序保证限制:仅保证单个分区内的顺序,跨分区无序。
    • 资源消耗:多副本和持久化存储占用较多磁盘和内存资源。

zookeeper概述

核心特性

  1. 高可用性
    • 以集群方式部署,采用Leader-Follower模式,通过自动Leader选举机制,在节点故障时仍能维持服务,确保系统的高可用性。
  2. 数据一致性
    • 使用ZAB协议(ZooKeeper Atomic Broadcast)保证数据一致性,所有写操作由Leader处理并复制到Followers,确保集群数据一致性。
  3. 可靠性
    • 采用持久化日志记录所有写操作,即使Leader宕机,新Leader也可从日志中恢复数据,保证数据的可靠性和可恢复性。
  4. 高性能
    • 使用内存数据库存储数据,快速响应读操作,并通过并行处理提高写操作吞吐量。
  5. 简单易用
    • 提供简单的API和数据模型,易于理解和使用,适用于各种分布式应用场景。
  6. 灵活性
    • 允许在集群运行时动态添加或删除节点,灵活适应不同规模和需求的系统。

工作原理

  1. 集群模式
    • 由多个ZooKeeper服务器组成集群,通过选举机制选择Leader,其他服务器作为Followers。
  2. 数据模型
    • 提供树形结构的命名空间,每个节点称为ZNode,可存储少量数据,支持持久节点和临时节点。
  3. 原子更新
    • 对ZNode的更新操作具有原子性,要么完全成功,要么完全失败,保证数据一致性。
  4. 通知机制
    • 客户端可在ZNode上注册Watcher,当节点状态变化时,ZooKeeper会通知客户端,支持实时响应。
  5. 事务日志
    • 记录所有写操作,确保服务器崩溃或重启后可恢复到之前的状态,保证数据可靠性。

优劣势

  1. 优势
    • 高可用性:通过Leader选举和集群部署,确保系统在节点故障时仍能正常运行。
    • 强一致性:使用ZAB协议保证数据一致性,支持线性一致性读操作。
    • 高性能:内存数据库和并行处理机制,提高读写操作效率。
    • 灵活性:支持动态添加或删除节点,适应不同规模和需求的系统。
  2. 劣势
    • 单点故障风险:Leader节点是单点,宕机时虽会选举新Leader,但存在短暂不可用性。
    • 写入性能受限:所有写操作由Leader处理并复制,高负载下写入性能可能受影响。
    • 数据大小限制:每个ZNode的数据大小有限制(默认1MB),不适合存储大量数据。
    • 系统复杂性:功能强大但复杂,简单应用场景下可能增加系统复杂度。

zookeeper集群架构

  • Leader:领导者角色,主要负责投票的发起和决议,以及更新系统状态
  • follower:跟随着角色,用于接收客户端的请求并返回结果给客户端,在选举过程中参与投票。
  • observer:观察者角色,用户接收客户端的请求,并将写请求转发给1eader,同时同步 leader 状态,但是不参与投票。0bserver 目的是扩展系统,提高伸缩性。
  • client:客户端角色,用于向zookeeper 发起请求

ZooKeeper在Kafka中的核心作用

  1. Broker元数据管理
    • Broker注册与发现:Kafka的Broker启动时会向ZooKeeper注册自身信息(如IP、端口),消费者和生产者通过ZooKeeper获取集群Broker列表,实现动态发现。
    • Broker状态监控:ZooKeeper维护Broker的在线/离线状态,若Broker宕机,ZooKeeper会通知其他组件,触发重新平衡(Rebalance)。
  2. Topic与Partition管理
    • Topic元数据存储:ZooKeeper存储Topic的分区(Partition)数量、副本(Replica)分配等元数据,确保所有Broker对Topic结构有一致认知。
    • Partition Leader选举:当Partition的Leader宕机时,ZooKeeper协调Follower选举新Leader,保证分区可用性。
  3. Consumer Group协调
    • Offset存储:早期Kafka版本中,Consumer Group的消费偏移量(Offset)存储在ZooKeeper中(新版本已迁移至Kafka内部Topic)。
    • Rebalance触发:Consumer Group成员变化(如新消费者加入或宕机)时,ZooKeeper通知其他成员,触发重新分配Partition。
  4. 集群配置管理
    • 动态配置更新:Kafka集群的配置(如副本因子、分区数)可通过ZooKeeper动态更新,无需重启Broker。
    • ACL权限控制:ZooKeeper存储Kafka的ACL(访问控制列表),管理Topic和Broker的权限。

 案例:分布部署

 三台设备

关闭防火墙及系统内核

[root@kafka1 ~]# systemctl stop firewalld        #关闭防火墙
[root@kafka1 ~]# seten/tab 0                    #关闭系统内核

更改三台设备名称

[root@localhost ~]#101:hostnamectl set-hostname fafka1
[root@localhost ~]#102:hostnamectl set-hostname fafka2
[root@localhost ~]#103:hostnamectl set-hostname fafka3
bash                    #立即生效

修改hosts文件

[root@kafka1 ~]# vim /etc/hosts
101:hostnamectl set-hostname fafka1
102:hostnamectl set-hostname fafka2
103:hostnamectl set-hostname fafka3

将zookeeper文件包解压缩,解压即可用

[root@kafka1 ~]# tar zxf apache-zookeeper-3.6.0-bin.tar.gz

将解压后的文件移动到指定的目录下

[root@kafka1 ~]# mv apache-zookeeper-3.6.0-bin /etc/zookeeper

创建日志文件

[root@kafka1 ~]# mkdir -p /etc/zookeeper/zookeeper-data

 修改配置文件名称

[root@kafka1 ~]# cd /etc/zookeeper/conf/
[root@kafka1 ~]# cp zoo_samaple.cfg	zoo.cfg    #将配置文件更换成能用的文件

修改配置文件

[root@kafka1 ~]# vim zoo.cfg
#12行
dataDir=/etc/zookeeper/zookeeper-data
clientPort=2181 #下
server.1=192.168.10.101:2888:3888
server.2=192.168.10.102:2888:3888
server.3=192.168.10.103:2888:3888

 给设备分一个id

[root@kafka1 ~]# 101:echo '1'>/etc/zookeeper/zookeeper-data/myid
[root@kafka1 ~]# 102:echo '2'>/etc/zookeeper/zookeeper-data/myid
[root@kafka1 ~]# 103:echo '3'>/etc/zookeeper/zookeeper-data/myid

启动zookeeper

[root@kafka1 ~]# cd /etc/zookeeper/bin/
[root@kafka1 ~]# ./zkServer.sh start            #启动

查看状态

./zkServer.sh status	#查看

 解压kafka

[root@kafka1 ~]# tar zxf kafka_2.13-2.4.1.tgz 

移动到指定目录

[root@kafka1 ~]# mv kafka /etc/kafka

修改配置文件

[root@kafka1 ~]# vim /etc/kadka
#21行
101:1
102:2
103:3
#日志60行
log.dirs=/etc/kafka/kafka-logs
#31行
listeners=PLAINTEXT://192.168.10.101:9092    #监听自己的IP地址:102、103同上
#123行
zookeeper.connect=192.168.10.101:2181,192.168.10.102:2181,192.168.10.103:2181

创建日志文件

[root@kafka1 ~]# cd /etc/kafka
[root@kafka1 ~]# mkdir kafka-logs

启动kafka

[root@kafka1 ~]# cd bin
[root@kafka1 ~]# ./kafka-server-start.sh ../config/server.properties &

检测是否启动起来

netstat -anpt |grep 2181

验证

101创建主题

[root@kafka1 ~]# ./kafka-topics.sh --create --zookeeper kafka1:2181 --replication-factor 1 --partitions 1 --topic test

生成消息

[root@kafka1 ~]# ./kafka-console-producer.sh --broker-list kafka1:9092 -topic test

102接收

[root@kafka1 ~]# cd /etc/kafka/bin

[root@kafka1 ~]# ./kafka-console-consumer.sh --bootstrap-server kafka1:9092 --topic test

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值