Kafka:分布式消息系统的核心原理与安装部署-CSDN博客
自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客
Kafka 生产者全面解析:从基础原理到高级实践-CSDN博客
Kafka 生产者优化与数据处理经验-CSDN博客
Kafka 工作流程解析:从 Broker 工作原理、节点的服役、退役、副本的生成到数据存储与读写优化-CSDN博客
Kafka 消费者全面解析:原理、消费者 API 与Offset 位移-CSDN博客
Kafka 分区分配及再平衡策略深度解析与消费者事务和数据积压的简单介绍-CSDN博客
Kafka 数据倾斜:原因、影响与解决方案-CSDN博客
Kafka 核心要点解析_kafka mirrok-CSDN博客
Kafka 核心问题深度解析:全面理解分布式消息队列的关键要点_kafka队列日志-CSDN博客
目录
一、Kafka 概述
(一)定义
(二)Kafka 中的组成成员
(三)消息队列(中间件)
1)传统消息队列的应用场景
2)消息队列的两种模式
二、Kafka 基础架构
三、Kafka 的名词概念
四、Kafka 的安装部署
(一)集群规划
(二)集群部署
(三)集群启停脚本
五、Kafka 命令行操作
(一)主题命令行操作
(二)生产者命令行操作
(三)消费者命令行操作
六、总结
在当今大数据和实时处理的时代,消息中间件扮演着至关重要的角色。Kafka 作为其中的佼佼者,以其高吞吐量、持久性和分布式的特性,被广泛应用于各种大规模数据处理场景。本文将深入探讨 Kafka 的各个方面,包括其定义、组成成员、架构、应用场景以及安装部署和基本操作等,旨在帮助读者全面理解和掌握这一强大的技术工具。
一、Kafka 概述
(一)定义
Kafka 是一个分布式的发布 — 订阅消息系统,最初由 LinkedIn 公司发布,使用 Scala 语言编写,并于 2010 年 12 月开源成为 Apache 的顶级项目。它主要用于处理活跃的实时数据,如用户的登录、浏览、点击、分享、喜欢等行为产生的数据。从传统意义上讲,Kafka 是一个分布式的基于发布 / 订阅模式的消息队列,而其最新定义为一个开源的分布式事件流平台,众多公司利用它构建高性能数据管道、进行流分析、数据集成以及支撑关键任务应用。
(二)Kafka 中的组成成员
- 生产者 API:允许应用程序发布记录流至一个或多个 Kafka 的主题。例如,在一个电商系统中,订单处理模块可以作为生产者将新生成的订单信息发送到特定的 Kafka 主题中,以便后续的模块进行处理,如库存管理系统可以订阅该主题并根据订单信息更新库存。
- 消费者 API:应用程序能够通过它订阅一个或多个主题,并处理接收到的记录流。以社交网络平台为例,消息推送服务可以作为消费者订阅用户相关的主题,如好友动态主题,当有新的好友动态产生并被发送到该主题时,消息推送服务就可以获取并推送给对应的用户。
- Streams API:使应用程序能够充当流处理器,从一个或多个主题获取输入流,并生产一个输出流到一个或多个主题,有效地对输入流进行转换得到输出流。比如在一个实时数据处理系统中,数据清洗模块可以利用 Streams API 从原始数据主题读取数据,经过清洗和转换后,将处理后的干净数据发送到另一个主题供后续分析使用。
- Connector API:用于构建和运行可重用的生产者或者消费者,能够把 Kafka 主题连接到现有的应用程序或数据系统。例如,一个连接到关系数据库的连接器可以监测数据库表的变化,将变化的数据以消息的形式发送到 Kafka 主题中,或者从 Kafka 主题中获取数据并更新到数据库中。
(三)消息队列(中间件)
在企业中,常见的消息队列产品有 Kafka、ActiveMQ、RabbitMQ、RocketMQ 等。在大数据场景下,Kafka 因其出色的性能和对大规模数据处理的良好适配性而被广泛采用。而在 JavaEE 开发中,ActiveMQ、RabbitMQ、RocketMQ 也各有其应用场景。
- Kafka:如前所述,是最适用于大数据技术的消息中间件,具有高吞吐量、可持久化存储等优势,能够很好地应对海量数据的实时处理需求。
- RabbitMQ:使用 Erlang 编写,具有良好的可靠性和灵活性,在一些对消息可靠性要求较高且对语言有特定需求的场景中会被选用。
- RocketMQ:由阿里出品,纯 Java 编写,性能优异,但由于其体积较大、安装复杂且部分功能收费,在一些特定的阿里系生态或对其性能有极致需求且愿意承担成本的场景中使用。
- ActiveMQ:实现了 SUN 公司的 JMS 规范,学习成本相对较低,使用较为方便,适合一些对性能要求不是特别高、规模较小的应用场景。
1)传统消息队列的应用场景
解耦:
各系统之间通过消息系统这个统一的接口交换数据,无需了解彼此的具体实现细节。例如,在一个电商系统中,订单系统与库存系统、物流系统等通过消息队列进行解耦。订单系统只需要将订单信息发送到消息队列中,而库存系统和物流系统分别订阅相应的消息主题并进行处理,这样当库存系统或物流系统进行升级或修改时,不会影响到订单系统的正常运行,反之亦然。
冗余:
部分消息系统具备消息持久化能力,可有效规避消息在处理前丢失的风险。比如在金融交易系统中,每一笔交易信息都作为消息发送到消息队列中,消息队列将这些消息持久化存储。即使在某个时刻系统出现故障,导致部分消息处理中断,当系统恢复后,仍然可以从消息队列中获取未处理的消息并继续处理,确保交易信息不会丢失。
扩展:
消息系统作为统一的数据接口,各系统可独立进行扩展。以一个在线教育平台为例,用户注册系统和课程推荐系统通过消息队列连接。当用户注册量增加时,可以独立地对用户注册系统进行水平扩展,增加服务器节点来提高注册处理能力,而不会影响到课程推荐系统的运行。同样,当课程资源增加需要扩展课程推荐系统时,也不会对用户注册系统造成干扰。
峰值处理能力:
消息系统能够承受峰值流量,业务系统可根据自身处理能力从消息系统中获取并处理对应量的请求。例如在电商促销活动期间,如 “双十一” 或 “618”,瞬间会有大量的订单产生。如果直接将这些订单请求发送到订单处理系统,可能会导致系统崩溃。而通过引入消息队列,订单请求先被发送到消息队列中进行缓冲,订单处理系统可以按照自己的处理能力从消息队列中逐步获取订单并处理,避免了因峰值流量过大而导致系统瘫痪的情况。
可恢复性:
系统中部分组件失效并不会影响整个系统的运行,恢复后仍可从消息系统中获取并处理数据。例如在一个分布式的物联网系统中,某个传感器节点出现故障,无法及时发送数据到数据处理中心。但由于数据是先发送到消息队列中的,当传感器节点恢复后,之前未发送的数据仍然可以从消息队列中取出并被数据处理中心处理,不会因为传感器节点的短暂故障而导致数据丢失或整个系统的数据处理出现断层。
异步通信:
在不需要立即处理请求的场景下,可以将请求放入消息系统,在合适的时候再进行处理。比如在一个企业内部的邮件系统中,当用户发送一封邮件时,邮件系统可以先将邮件发送到消息队列中,然后由后台的邮件处理服务在资源空闲时从消息队列中取出邮件进行发送、存储等处理操作,而不是在用户点击发送按钮后立即进行一系列复杂的处理,这样可以提高系统的响应速度和用户体验,同时也可以合理利用系统资源。
2)消息队列的两种模式
消息队列通常有两种模式:点对点模式和发布 / 订阅模式。
点对点模式:
在这种模式下,消息生产者将消息发送到一个特定的队列中,消息消费者从该队列中获取消息。一个消息只能被一个消费者消费,一旦被消费,该消息就从队列中移除。这种模式适用于一些任务处理场景,例如在一个任务调度系统中,多个任务生产者将任务消息发送到任务队列中,多个任务消费者从队列中获取任务并执行,每个任务只会被一个消费者处理,确保任务不会被重复执行。
发布 / 订阅模式:
消息的发布者将消息发布到一个主题上,多个订阅者可以订阅该主题并接收消息。与点对点模式不同,发布 / 订阅模式下的消息可以被多个订阅者同时接收和处理。例如在一个新闻推送系统中,新闻发布者将新闻消息发布到一个特定的新闻主题上,多个用户订阅了该新闻主题,那么当有新的新闻发布时,所有订阅的用户都可以接收到该新闻消息,实现了一对多的消息传播。Kafka 主要采用的是发布 / 订阅模式,同时也在一定程度上支持点对点模式的一些特性,如通过消费者组的概念来实现消息在不同消费者之间的分配和处理。
二、Kafka 基础架构
Producer:
消息生产者,是向 Kafka broker 发送消息的客户端。它负责将应用程序产生的数据转换为 Kafka 能够识别和处理的消息格式,并发送到指定的 Kafka 主题中。例如在一个日志收集系统中,各个服务器上的日志采集程序就是生产者,它们将收集到的日志信息封装成消息发送到 Kafka 集群中的特定主题,以便后续进行集中分析和处理。
Consumer:
消息消费者,从 Kafka broker 中获取消息的客户端。消费者可以订阅一个或多个主题,并按照一定的规则从主题的分区中获取消息进行处理。例如在一个数据分析系统中,数据处理模块作为消费者订阅了包含原始数据的 Kafka 主题,从主题中获取数据后进行数据分析和挖掘操作。
Consumer Group(CG):
消费者组,由多个 consumer 组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。这样的设计可以实现消息的负载均衡和高可用性。例如在一个大规模的电商数据处理系统中,可以创建多个消费者组,每个消费者组负责处理一部分订单数据,当某个消费者出现故障时,其所属消费者组内的其他消费者可以继续处理该分区的订单数据,确保整个系统的稳定性和数据处理的连续性。
Broker:
一台 Kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。Broker 是 Kafka 集群的核心组成部分,负责存储和管理消息数据。它接收生产者发送的消息,并将其存储在本地磁盘上,同时为消费者提供消息获取服务。例如在一个拥有多个数据中心的大型企业中,可以在每个数据中心部署一个或多个 Kafka broker,组成一个分布式的 Kafka 集群,以满足不同地区的数据处理需求和提高系统的可靠性。
Topic:
可以理解为一个队列,生产者和消费者面向的都是一个 topic。Topic 是对消息的一种分类方式,不同类型的消息可以被发送到不同的主题中。例如在一个社交媒体平台中,可以创建 “用户动态”“系统通知”“广告信息” 等不同的主题,分别用于存储和处理相应类型的消息。
Partition:
为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列。通过将主题划分为多个分区,可以提高 Kafka 的吞吐量和处理能力。例如在一个日志处理系统中,如果每天产生的日志量非常大,可以将日志主题划分为多个分区,分别存储在不同的 broker 上,这样多个消费者就可以同时从不同的分区中获取日志消息进行处理,加快了日志处理的速度。
Replica:
副本。一个 topic 的每个分区都有若干个副本,一个 Leader 和若干个 Follower。副本的存在主要是为了提高数据的可靠性和可用性。例如在一个对数据安全性要求较高的金融数据处理系统中,每个分区可以设置多个副本,分布在不同的 broker 上,当 Leader 副本所在的 broker 出现故障时,Follower 副本可以迅速接替成为新的 Leader,确保数据的正常读写和系统的稳定运行。
Leader:
每个分区多个副本的 “主”,生产者发送数据的对象,以及消费者消费数据的对象都是 Leader。Leader 负责处理来自生产者的消息写入请求和消费者的消息读取请求,并将数据同步到 Follower 副本中。例如在一个分布式的实时数据处理系统中,各个分区的 Leader 副本所在的 broker 需要具备较高的性能和稳定性,以确保能够快速响应生产者和消费者的请求,同时保证数据的一致性和完整性。
Follower:
每个分区多个副本中的 “从”,实时从 Leader 中同步数据,保持和 Leader 数据的同步。Leader 发生故障时,某个 Follower 会成为新的 Leader。Follower 副本的主要作用是备份数据,当 Leader 出现问题时能够及时顶上,保证系统的可用性。例如在一个大型电商系统的订单数据处理中,订单主题的各个分区的 Follower 副本会不断从 Leader 副本同步订单数据,一旦 Leader 所在的服务器出现故障,其中一个 Follower 会被选举为新的 Leader,继续处理订单数据的读写请求,避免因单点故障导致订单数据处理中断。
三、Kafka 的名词概念
- Kafka服务:
- Topic:主题,Kafka处理的消息的不同分类。
- Broker:消息服务器代理,Kafka集群中的一个kafka服务节点称为一个broker,主要存储消息数据。存在硬盘中。每个topic都是有分区的。
- Partition:Topic物理上的分组,一个topic在broker中被分为1个或者多个partition,分区在创建topic的时候指定。
- Message:消息,是通信的基本单位,每个消息都属于一个partition
- Kafka服务相关
- Producer:消息和数据的生产者,向Kafka的一个topic发布消息。
- Consumer:消息和数据的消费者,定于topic并处理其发布的消息。
- Zookeeper:协调kafka的正常运行。
第一个:Topic
kafka将消息以topic为单位进行归类
topic特指kafka处理的消息源(feeds of messages)的不同分类。
topic是一种分类或者发布的一些列记录的名义上的名字。kafka主题始终是支持多用户订阅的;也就是说,一 个主题可以有零个,一个或者多个消费者订阅写入的数据。
在kafka集群中,可以有无数的主题。
生产者和消费者消费数据一般以主题为单位。更细粒度可以到分区级别。
第二个:分区
Partitions:分区数:控制topic将分片成多少个log,可以显示指定,如果不指定则会使用 broker(server.properties)中的num.partitions配置的数量。
一个broker服务下,是否可以创建多个分区?
可以的,broker数与分区数没有关系; 在kafka中,每一个分区会有一个编号:编号从0开始
每一个分区的数据是有序的说明-数据是有序 如何保证一个主题下的数据是有序的?(生产是什么样的顺序,那么消费的时候也是什么样的顺序)
topic的Partition数量在创建topic时配置。
Partition数量决定了每个Consumer group中并发消费者的最大数量。
Consumer group A 有两个消费者来读取4个partition中数据;Consumer group B有四个消费者来读取4个 partition中的数据
第三个:副本数
副本数(replication-factor):控制消息保存在几个broker(服务器)上,一般情况下等于broker的个数
一个broker服务下,是否可以创建多个副本因子?
不可以;创建主题时,副本因子应该小于等于可用的broker数。 副本因子过程图副本因子的作用:让kafka读取数据和写入数据时的可靠性。
副本因子是包含本身|同一个副本因子不能放在同一个Broker中。
如果某一个分区有三个副本因子,就算其中一个挂掉,那么只会剩下的两个钟,选择一个leader,但不会在其 他的broker中,另启动一个副本(因为在另一台启动的话,存在数据传递,只要在机器之间有数据传递,就 会长时间占用网络IO,kafka是一个高吞吐量的消息系统,这个情况不允许发生)所以不会在零个broker中启 动。
如果所有的副本都挂了,生产者如果生产数据到指定分区的话,将写入不成功。
lsr表示:当前可用的副本
第四个:kafka Partition offset
任何发布到此partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量),
offset是一个long类型数字,它唯一标识了一条消息,消费者通过(offset,partition,topic)跟踪记录。
第五个:分区数和消费组的关系。
消费组: 由一个或者多个消费者组成,同一个组中的消费者对于同一条消息只消费一次。某一个主题下的分区数,对于消费组来说,应该小于等于该主题下的分区数。如下所示:
如:某一个主题有4个分区,那么消费组中的消费者应该小于等于4,而且最好与分区数成整数倍
1 2 4
同一个分区下的数据,在同一时刻,不能被同一个消费组的不同消费者消费
总结:分区数越多,同一时间可以有越多的消费者来进行消费,消费数据的速度就会越快,提高消费的性能.
四、Kafka 的安装部署
(一)集群规划
在构建 Kafka 集群时,需要合理规划集群中的节点分布。例如,可以在多台服务器上分别部署 Zookeeper 和 Kafka。如在 bigdata01、bigdata02、bigdata03 三台服务器上,同时部署 Zookeeper 和 Kafka,这样可以形成一个分布式的集群环境,提高系统的可靠性和扩展性。
(二)集群部署
下载安装包:
通过网盘分享:kafka_2.12-3.0.0.tgz
从官方下载地址(Apache Kafka)获取 Kafka 安装包。例如,下载 kafka_2.12 - 3.0.0.tgz 版本的安装包,其中 2.12 表示 Scala 语言的版本,3.0.0 表示 Kafka 版本。
解压安装包并改名:
将下载的安装包解压到指定目录
tar - zxvf kafka_2.12 - 3.0.0.tgz - C /opt/installs/
然后将解压后的文件夹重命名为 kafka3,方便管理和识别。
mv kafka_2.12-3.0.0/ kafka3
修改配置文件:
进入到
cd /opt/installs/kafka3/config/
目录,修改 server.properties 文件。
修改红色部分:
#broker 的全局唯一编号,不能重复,只能是数字。
broker.id=0
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘 IO 的线程数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka 运行日志(数据)存放的路径,路径不需要提前创建,kafka 自动帮你创建,可以
配置多个磁盘路径,路径与路径之间可以用","分隔
log.dirs=/opt/installs/kafka3/datas
#topic 在当前 broker 上的分区个数
num.partitions=1
#用来恢复和清理 data 下数据的线程数量
num.recovery.threads.per.data.dir=1
# 每个 topic 创建时的副本数,默认时 1 个副本
offsets.topic.replication.factor=1
#segment 文件保留的最长时间,超时将被删除
log.retention.hours=168
#每个 segment 文件的大小,默认最大 1G
log.segment.bytes=1073741824
# 检查过期数据的时间,默认 5 分钟检查一次是否数据过期
log.retention.check.interval.ms=300000
#配置连接 Zookeeper 集群地址(在 zk 根目录下创建/kafka,方便管理)
zookeeper.connect=bigdata01:2181,bigdata02:2181,bigdata03:2181/kafka
/kafka的意思是:在zk中创建一个文件夹叫做kafka
分发安装包:
使用
xsync.sh kafka3 /
将安装包分发到其他节点 ,也可以使用scp
scp /opt/installs/kafka3 root@hadoop12:/opt/installs
确保集群中的各个节点都拥有相同的 Kafka 安装文件。
修改其他节点配置文件:
分别在 bigdata02 和 bigdata03 上修改配置文件
cd /opt/installs/kafka/config/
server.properties 中的 broker.id = 1、broker.id = 2,需要注意 broker.id 在整个集群中必须唯一,不能重复。
配置环境变量
修改 bigdata01 的环境变量:
增加如下内容
#KAFKA_HOME
export KAFKA_HOME=/opt/installs/kafka3
export PATH=KAFKA_HOME/bin
分发环境变量配置文件:
使用
xsync.sh/etc/profile
将修改后的环境变量配置文件分发到其他节点,然后在各个节点上使用
xcall.sh source /etc/profile
刷新环境变量,使环境变量在整个集群中生效。
启动集群
先启动 Zookeeper 集群:
使用
xcall.sh zkServer.sh start
命令启动 Zookeeper 集群,如果已经启动则可跳过此步骤。
启动 Kafka 集群:
依次在 bigdata01、bigdata02、bigdata03 节点上启动 Kafka。先进入到 kafka3 这个文件夹中,在三台服务器上分别运行启动命令:
bin/kafka-server-start.sh -daemon config/server.properties
这样就可以启动整个 Kafka 集群,使其开始接收和处理消息。
关闭集群 :
在每一台服务器上运行这个
bin/kafka-server-stop.sh
(三)集群启停脚本
创建脚本文件:
在 /usr/local/sbin 目录下创建文件 kf.sh 脚本文件,使用 vim kf.sh 进行编辑。
编写脚本内容:
#! /bin/bash
case $1 in
"start"){
for i in bigdata01 bigdata02 bigdata03
do
echo " --------启动 $i Kafka-------"
ssh $i "source /etc/profile; /opt/installs/kafka3/bin/kafka-server-start.sh -daemon /opt/installs/kafka3/config/server.properties"
done
};;
"stop"){
for i in bigdata01 bigdata02 bigdata03
do
echo " --------停止 $i Kafka-------"
ssh $i "source /etc/profile; /opt/installs/kafka3/bin/kafka-server-stop.sh"
done
};;
esac
添加权限:
使用 chmod u + x kf.sh 为脚本添加可执行权限。这样就可以使用 kf.sh start 和 kf.sh stop 命令方便地启动和停止 Kafka 集群。需要注意的是,停止 Kafka 集群时,一定要等 Kafka 所有节点进程全部停止后再停止 Zookeeper 集群。因为 Zookeeper 集群当中记录着 Kafka 集群相关信息,Zookeeper 集群一旦先停止,Kafka 集群就没有办法再获取停止进程的信息,只能手动杀死 Kafka 进程了,这可能会导致一些未处理完的数据丢失或其他异常情况。
chmod u+x kf.sh
kf.sh start
kf.sh stop
五、Kafka 命令行操作
(一)主题命令行操作
查看操作主题命令参数:
使用 bin/kafka-topics.sh 命令可以查看与主题操作相关的命令参数,这些参数可以帮助我们进行主题的创建、查看、修改和删除等操作。
bin/kafka-topics.sh
查看当前服务器中的所有 topic:
通过 bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --list 命令可以列出当前连接的 Kafka 服务器中的所有主题,方便我们了解集群中已有的主题信息,以便进行后续的操作或监控。
bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --list
创建 first topic:
使用 bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --create --partitions 1 --replication-factor 3 --topic first 命令可以创建一个名为 first 的主题,其中 --partitions 1 表示设置主题的分区数为 1,--replication-factor 3 表示设置副本数为 3,这样可以根据实际需求创建具有特定分区和副本配置的主题,以满足不同的应用场景需求,如高可用性或高吞吐量的需求。
bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --create --partitions 1 --replication-factor 3 --topic first
查看 first 主题的详情:
执行 bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --describe --topic first 命令可以查看 first 主题的详细信息,包括主题的分区信息、副本信息、分区的 leader 信息以及每个分区的 ISR(In-Sync Replicas)列表等,这些信息对于了解主题的状态和数据分布情况非常重要,有助于进行故障排查和性能优化。
bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --describe --topic first
修改分区数(注意:分区数只能增加,不能减少):
使用 bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --alter --topic first --partitions 3 命令可以将 first 主题的分区数修改为 3。在实际应用中,如果发现某个主题的吞吐量不足,可以考虑增加分区数来提高处理能力,但需要注意分区数增加后可能会对消费者的消费逻辑和数据顺序性产生一定影响,需要进行相应的调整和测试。
bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --alter --topic first --partitions 3
再次查看 first 主题的详情:
再次执行 bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --describe --topic first 命令可以查看修改分区数后的 first 主题的详细信息,确认分区数是否修改成功以及其他相关信息是否发生变化,以便及时发现和解决可能出现的问题。
bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --describe --topic first
删除 topic(自己演示):
使用 bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --delete --topic first 命令可以删除 first 主题,但需要谨慎操作,因为删除主题后,主题中的所有数据都将被删除,且无法恢复。在删除主题之前,需要确保该主题不再被使用或已经备份了重要的数据。
bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --delete --topic first
(二)生产者命令行操作
查看操作生产者命令参数:
使用 bin/kafka-console-producer.sh 命令可以查看与生产者操作相关的命令参数,这些参数可以帮助我们进行消息的发送和生产者的配置等操作。
bin/kafka-console-producer.sh
发送消息:
通过 bin/kafka-console-producer.sh --bootstrap-server bigdata01:9092 --topic first 命令可以连接到 Kafka 集群中的 first 主题,并在命令行中输入消息进行发送。例如,输入 >hello world 和 >bigdata bigdata 等消息,这些消息将被发送到 first 主题中,供消费者进行消费和处理。生产者可以根据实际需求将各种类型的数据封装成消息发送到相应的主题,如在一个日志收集系统中,将服务器的日志信息发送到特定的日志主题中,或者在一个电商系统中,将订单信息发送到订单主题中。
bin/kafka-console-producer.sh --bootstrap-server bigdata01:9092 --topic first
(三)消费者命令行操作
查看操作消费者命令参数:
使用 bin/kafka-console-consumer.sh 命令可以查看与消费者操作相关的命令参数,这些参数可以帮助我们进行消息的消费和消费者的配置等操作。
bin/kafka-console-consumer.sh
消费消息
消费 first 主题中的数据:
执行 bin/kafka-console-consumer.sh --bootstrap-server bigdata01:9092 --topic first 命令可以连接到 Kafka 集群中的 first 主题,并开始消费该主题中的消息。消费者会从主题的分区中获取消息并在命令行中显示出来,这样我们就可以看到生产者发送到该主题的消息内容,以便进行测试和验证消息的正确性和完整性。
bin/kafka-console-consumer.sh --bootstrap-server bigdata01:9092 --topic first
把主题中所有的数据都读取出来(包括历史数据):
使用 bin/kafka-console-consumer.sh --bootstrap-server bigdata01:9092 --from-beginning --topic first 命令可以从主题的开头开始消费所有的消息,包括之前已经产生但尚未被消费的历史数据。这在一些需要重新处理历史数据或者进行数据回溯的场景中非常有用,如在数据分析系统中,如果发现之前的数据分析结果存在问题,可以使用该命令重新消费历史数据进行重新分析和处理。
bin/kafka-console-consumer.sh --bootstrap-server bigdata01:9092 --from-beginning --topic first
六、总结
Kafka 作为一种强大的分布式消息系统,在大数据处理和实时应用领域具有广泛的应用。通过深入理解其定义、组成成员、基础架构、名词概念以及掌握其安装部署和命令行操作,我们能够更好地利用 Kafka 构建高效、可靠的消息处理平台。无论是应对大规模数据的实时传输、处理复杂的业务解耦需求,还是构建灵活的数据管道和流分析系统,Kafka 都提供了丰富的功能和出色的性能。在实际应用中,我们还需要根据具体的业务场景和需求,合理地配置和优化 Kafka 集群,以充分发挥其优势,为企业的数字化转型和业务创新提供有力的支持。同时,随着技术的不断发展,Kafka 也在持续演进和完善,我们需要不断关注其新的特性和应用模式,以便更好地适应不断变化的技术环境和业务挑战。