2026/4/6 Windows安装Kafka

目录

一、Kafka介绍

[1.1、初识 Kafka](#1.1、初识 Kafka)

1.2、消息队列

1.3、生产者-消费者模式

1.4、消息中间件对比

1.5、ZooKeeper

二、快速上手

2.1、环境安装

[2.2、安装 Java8(略)](#2.2、安装 Java8(略))

2.3、安装ZooKeeper(略)

2.4、下载和解压和Kafka

2.5、配置Kakfa

配置Kafka服务器

配置Zookeeper

三、启动Kafka

3.1、先启动ZooKeeper

四、kafka消息发送测试

4.1、连接测试

4.2、创建主题

4.3、发送消息,消费消息


一、Kafka介绍

1.1、初识 Kafka

(1)Kafka 是一个由 Scala 和 Java 语言开发的,经典高吞吐量的分布式消息发布和订阅系统,也是大数据技术领域中用作数据交换的核心组件之一。以高吞吐,低延迟,高伸缩,高可靠性,高并发,且社区活跃度高等特性,从而备受广大技术组织的喜爱。

(2)2010年,Linkedin 公司为了解决消息传输过程中由各种缺陷导致的阻塞、服务无法访问等问题,主导开发了一款分布式消息日志传输系统。主导开发的首席架构师 Jay Kreps 因为喜欢写出《变形记》的西方表现主义文学先驱小说家 Jay Kafka,所以给这个消息系统起了一个很酷,却和软件系统特性无关的名称 Kafka。

(3)因为备受技术组织的喜爱,2011年,Kafka 软件被捐献给 Apache 基金会,并于 7 月被纳入 Apache 软件基金会孵化器项目进行孵化。2012 年 10 月,Kafka 从孵化器项目中毕业,转成 Apache 的顶级项目。由独立的消息日志传输系统转型为开源分布式事件流处理平台系统,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用程序。

(4)官网地址:https://kafka.apache.org/

1.2、消息队列

(1)Kafka 软件最初的设计就是专门用于数据传输的消息系统,类似功能的软件有 RabbitMQ、ActiveMQ、RocketMQ 等。这些软件名称中的 MQ 是英文单词 Message Queue 的简称,也就是所谓的消息队列的意思。这些软件的核心功能是传输数据,而 Java 中如果想要实现数据传输功能,那么这个软件一般需要遵循 Java 消息服务技术规范 JMS (Java Message Service)。前面提到的 ActiveMQ 软件就完全遵循了 JMS 技术规范,而 RabbitMQ 是遵循了类似JMS规范并兼容 JMS 规范的跨平台的 AMQP (Advanced Message Queuing Protocol) 规范。除了上面描述的 JMS,AMQP 外,还有一种用于物联网小型设备之间传输消息的 MQTT 通讯协议。

(2)Kafka 拥有作为一个消息系统应该具备的功能,但是却有着独特的设计。可以这样说,Kafka 借鉴了 JMS 规范的思想,但是却并没有完全遵循 JMS 规范。这也恰恰是软件名称为 Kafka,而不是 KafkaMQ 的原因。

(3)由上可知,无论学习哪一种消息传输系统,JMS 规范都是大家应该首先了解的。所以这里就对 JMS 规范做一个简单的介绍:

  • JMS 是 Java 平台的消息中间件通用规范,定义了主要用于消息中间件的标准接口。如果不是很理解这个概念,可以简单地将 JMS 类比为Java 和数据库之间的 JDBC 规范。Java 应用程序根据 JDBC 规范种的接口访问关系型数据库,而每个关系型数据库厂商可以根据 JDBC 接口来实现具体的访问规则。JMS 定义的就是系统和系统之间传输消息的接口。
  • 为了实现系统和系统之间的数据传输,JMS 规范中定义很多用于通信的组件:
    • JMS Provider:JMS 消息提供者。其实就是实现 JMS 接口和规范的消息中间件,也就是我们提供消息服务的软件系统,比如 RabbitMQ、ActiveMQ、Kafka。
    • JMS Message:JMS 消息。这里的消息指的就是数据。一般采用Java数据模型进行封装,其中包含消息头,消息属性和消息主体内容。
    • JMS Producer:JMS 消息生产者。所谓的生产者,就是生产数据的客户端应用程序,这些应用通过 JMS 接口发送 JMS 消息。
    • JMS Consumer:JMS 消息消费者。所谓的消费者,就是从消息提供者(JMS Provider)中获取数据的客户端应用程序,这些应用通过 JMS 接口接收 JMS 消息。
  • JMS 支持两种消息发送和接收模型:一种是 P2P (Peer-to-Peer) 点对点模型 ,另外一种是发布/订阅 (Publish/Subscribe) 模型
    • P2P 模型:P2P 模型是基于队列的,消息生产者将数据发送到消息队列中,消息消费者从消息队列中接收消息。因为队列的存在,消息的异步传输成为可能。P2P 模型的规定就是每一个消息数据,只有一个消费者,当发送者发送消息以后,不管接收者有没有运行都不影响消息发布到队列中。接收者在成功接收消息后会向发送者发送接收成功的消息。
    • 发布/订阅模型:所谓得发布订阅模型就是事先将传输的数据进行分类,我们管这个数据的分类称之为主题 (Topic)。也就是说,生产者发送消息时,会根据主题进行发送。比如咱们的消息中有一个分类是 NBA,那么生产者在生产消息时,就可以将 NBA 篮球消息数据发送到 NBA 主题中,这样,对 NBA 消息主题感兴趣的消费者就可以申请订阅 NBA 主题,然后从该主题中获取消息。这样,也就是说一个消息,是允许被多个消费者同时消费的。这里生产者发送消息,我们称之为发布消息,而消费者从主题中获取消息,我们就称之为订阅消息。Kafka 采用就是这种模型。

1.3、生产者-消费者模式

(1)生产者-消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通信,而通过阻塞队列来进行通信,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个消息缓冲区,平衡了生产者和消费者的处理能力。在数据传输过程中,起到了一个削弱峰值的作用,也就是我们经常说到的削峰。

(2)上图中的缓冲区就是用来给生产者和消费者解耦的。在单点环境中,我们一般会采用阻塞式队列实现这个缓冲区。而在分布式环境中,一般会采用第三方软件实现缓冲区,这个第三方软件我们一般称之为中间件。纵观大多数应用场景,解耦合最常用的方式就是增加中间件。

(3)遵循 JMS 规范的消息传输软件 (RabbitMQ、ActiveMQ、Kafka、RocketMQ),我们一般就称之为消息中间件。使用软件的目的本质上也就是为了降低消息生产者和消费者之间的耦合性。提升消息的传输效率。

1.4、消息中间件对比

特性 ActiveMQ RabbitMQ RocketMQ Kafka
单机吞吐量 万级,比 RocketMQ、Kafka 低一个数量级 万级,比 RocketMQ、Kafka 低一个数量级 10 万级,支持高吞吐 10 万级,支持高吞吐
Topic 数量对吞吐量的影响 Topic 可以达到几百/几千量级 Topic 可以达到几百量级,如果更多的话,吞吐量会大幅度下降
时效性 ms级 微秒级别,延迟最低 ms级 ms级
可用性 高,基于主从架构实现高可用 高,基于主从架构实现高可用 非常高,分布式架构 非常高,分布式架构
消息可靠性 有较低的概率丢失数据 基本不丢 经过参数优化配置,可以做到 0 丢失 经过参数优化配置,可以做到 0 丢失
功能支持 MQ 领域的功能极其完备 并发能力强,性能极好,延时很低 MQ 功能较为完善,分布式,扩展性好 功能较为简单,支持简单的 MQ 功能,在大数据领域被广泛使用
其他 很早的软件,社区不是很活跃 开源,稳定,社区活跃度高 阿里开发,社区活跃度不高 开源,高吞吐量,社区活跃度极高

通过上面各种消息中间件的对比,大概可以了解,在大数据场景中我们主要采用 Kafka 作为消息中间件,而在 JaveEE 开发中我们主要采用ActiveMQ、RabbitMQ、RocketMQ 作为消息中间件。如果将 JavaEE 和大数据在项目中进行融合的话,那么 Kafka 其实是一个不错的选择。

1.5、ZooKeeper

(1)ZooKeeper 是一个开放源码的分布式应用程序协调服务软件。在当前的 Web 软件开发中,多节点分布式的架构设计已经成为必然,那么如何保证架构中不同的节点所运行的环境,系统配置是相同的,就是一个非常重要的话题。一般情况下,我们会采用独立的第三方软件保存分布式系统中的全局环境信息以及系统配置信息,这样系统中的每一个节点在运行时就可以从第三方软件中获取一致的数据。也就是说通过这个第三方软件来协调分布式各个节点之间的环境以及配置信息。Kafka 软件是一个分布式事件流处理平台系统,底层采用分布式的架构设计,就是说,也存在多个服务节点,多个节点之间 Kafka 就是采用 ZooKeeper 来实现协调调度的。

(2)ZooKeeper 的核心作用:

  • ZooKeeper 的数据存储结构可以简单地理解为一个 Tree 结构,而 Tree 结构上的每一个节点可以用于存储数据,所以一般情况下,我们可以将分布式系统的元数据(环境信息以及系统配置信息)保存在 ZooKeeper 节点中。
  • ZooKeeper 创建数据节点时,会根据业务场景创建临时节点或永久(持久)节点。永久节点就是无论客户端是否连接上 ZooKeeper 都一直存在的节点,而临时节点指的是客户端连接时创建,断开连接后删除的节点。同时,ZooKeeper 也提供了 Watch(监控)机制用于监控节点的变化,然后通知对应的客户端进行相应的变化。Kafka 软件中就内置了 ZooKeeper 的客户端,用于进行 ZooKeeper 的连接和通信。

(3)其实,Kafka 作为一个独立的分布式消息传输系统,还需要第三方软件进行节点间的协调调度,不能实现自我管理,无形中就导致 Kafka 和其他软件之间形成了耦合性,制约了 Kafka 软件的发展,所以从Kafka 2.8.X版本开始,Kafka 就尝试增加了 Raft 算法实现节点间的协调管理,来代替 ZooKeeper。不过 Kafka 官方不推荐此方式应用在生产环境中,计划在 Kafka 4.X 版本中完全移除 ZooKeeper,让我们拭目以待。

二、快速上手

2.1、环境安装

作为开源分布式事件流处理平台,Kafka 分布式软件环境的安装相对比较复杂,不利于 Kafka 软件的入门学习和练习。所以我们这里先搭建相对比较简单的 Windows 单机环境,让初学者快速掌握软件的基本原理和用法,后面的课程中,我们再深入学习 Kafka 软件在生产环境中的安装和使用。

2.2、安装 Java8(略)

(1)当前 Java 软件开发中,主流的版本就是 Java 8,而 Kafka 3.X 官方建议 Java 版本更新至 Java11,但是 Java8 依然可用。未来 Kafka 4.X版本会完全弃用 Java8,不过,咱们当前学习的 Kafka 版本为 3.6.1 版本,所以使用 Java 8 即可,无需升级。

(2)Kafka 的绝大数代码都是 Scala 语言编写的,而 Scala 语言本身就是基于 Java 语言开发的,并且由于 Kafka 内置了 Scala 语言包,所以 Kafka 是可以直接运行在 JVM 上的,无需安装其他软件。你能看到这个课件,相信你肯定已经安装 Java8 了,基本的环境变量也应该配置好了,所以此处安装过程省略。

2.3、安装ZooKeeper(略)

(1)参考我的zookeeper安装博客:https://blog.csdn.net/Abcdzzr/article/details/144490764?spm=1001.2014.3001.5502

2.4、下载和解压和Kafka

首先,让我们从Apache Kafka的官方网站下载最新的二进制发行版。您可以在以下网址找到下载链接:Apache Kafka

选择适用于Windows的版本并下载压缩文件。一旦下载完成,将文件解压到您选择的目录中。

下载好后解压到无中文,无空格目录下

2.5、配置Kakfa

配置Kafka服务器

在Kafka目录中,找到config文件夹,然后编辑server.properties文件。确保以下配置正确:

复制代码
# Kafka监听的端口号
listeners=PLAINTEXT://localhost:9092
 
# 日志存储目录
log.dirs=D:\\soft\\kafka\\data\\logs\\kafkalogs
配置Zookeeper

Kafka依赖于Zookeeper来管理集群的状态。在Kafka目录中,找到config文件夹,然后编辑zookeeper.properties文件。确保以下配置正确:

复制代码
dataDir=D:\\soft\\kafka\\data\\logs\\zookeeper
 
clientPort=2181

配置启动脚本

在Kafka目录中,找到\bin\windows目录下的kafka-server-start.bat文件,改成下图所示:

创建启动脚本

在kafka解压目录创建run-kafka.bat文件

set JAVA为你自己本地安装的java环境变量路径。

复制代码
@echo off
title Kafka Server
set JAVA="D:\soft\java\jdk1.8.0\bin\java.exe"
%JAVA% -Xmx1G -Xms1G -Dlog4j.configuration=file:config/log4j.properties -cp "libs\*" kafka.Kafka config\server.properties
pause

三、启动Kafka

启动顺序:ZooKeeper -> Kafka

关闭顺序:Kafka -> ZooKeeper

3.1、先启动ZooKeeper

双击zkServer.cmd文件

在双击zkCli.cmd文件

在双击run-kafka.bat文件

这样就是启动成功了!

四、kafka消息发送测试

4.1、连接测试

4.2、创建主题

4.3、发送消息,消费消息

至此kafka已经安装完毕!

相关推荐
zxfBdd2 小时前
Spark Map算子异常处理方法
大数据·分布式·spark
一个有温度的技术博主2 小时前
告别单点瓶颈:Redis主从架构与读写分离实战
redis·分布式·缓存·架构
哦豁灬2 小时前
bitbrick_k1集群使用prima_cpp分布式部署大模型推理
分布式
枫叶林FYL3 小时前
【Python高级工程与架构实战】项目二:事件驱动微服务拆分(分布式版)
分布式·微服务·架构
大力财经3 小时前
云访谈 203:她在资阳,下注 “换电电动车 + 分布式换电站” 新未来
分布式
Devin~Y3 小时前
高并发内容社区实战面试:从 Java 基础到 Spring Cloud、Kafka、Redis、RAG 搜索全解析
java·spring boot·redis·spring cloud·kafka·向量数据库·rag
学到头秃的suhian3 小时前
Kafka高性能
kafka
电磁脑机3 小时前
和大脑正确交互的脑机接口研究推演理论
分布式·神经网络·架构·交互·信号处理
Albert Edison4 小时前
【RabbitMQ】核心概念|工作流程|界面操作
分布式·rabbitmq·ruby