Kafka 单机和集群环境部署教程
目录
- 一、Kafka 单机环境部署
- 1. 环境准备
- 2. 安装 Java
- 3. 安装 ZooKeeper
- 3.1 下载并解压 ZooKeeper
- 3.2 配置 ZooKeeper
- 3.3 启动 ZooKeeper
- 3.4 验证 ZooKeeper 是否正常运行
- 4. 安装 Kafka
- 4.1 下载并解压 Kafka
- 4.2 配置 Kafka
- 4.3 创建日志目录
- 4.4 启动 Kafka Broker
- 4.5 验证 Kafka 是否正常运行
- 5. Kafka 单机部署的注意事项
- 二、Kafka 集群环境部署
- 1. 环境准备
- 2. 安装 ZooKeeper 集群
- 2.1 配置 ZooKeeper 节点 ID
- 2.2 启动 ZooKeeper 集群
- 3. 安装 Kafka 集群
- 3.1 配置 Kafka Broker
- 3.2 启动 Kafka Broker
- 4. 验证 Kafka 集群状态
- 4.1 创建 Topic
- 4.2 验证 Topic
- 5. Kafka 集群部署的注意事项
- 三、Kafka 使用案例:生产者和消费者
- 1. 使用 Java 实现 Kafka 生产者和消费者
- 1.1 添加依赖
- 1.2 编写 Kafka 生产者
- 1.3 编写 Kafka 消费者
- 1.4 运行 Java 程序
- 2. 使用 Python 实现 Kafka 生产者和消费者
- 2.1 安装 Kafka 库
- 2.2 编写 Kafka 生产者
- 2.3 编写 Kafka 消费者
- 2.4 运行 Python 程序
- 3. 注意事项
- 总结
- 部署过程中的注意事项
下面是 Apache Kafka 单机和集群环境部署的详细教程,包括部署过程中的注意事项以及一个使用案例。Apache Kafka 是一个分布式流处理平台,广泛用于实时数据处理、日志收集、消息队列等场景。
一、Kafka 单机环境部署
1. 环境准备
- 操作系统:Linux(推荐 Ubuntu 20.04 或 CentOS 7)
- Java:Kafka 需要 Java 环境,推荐使用 OpenJDK 8 或 11。
- ZooKeeper:Kafka 依赖 ZooKeeper 进行分布式协调。
2. 安装 Java
在 Ubuntu 中:
sudo apt update
sudo apt install openjdk-11-jdk
在 CentOS 中:
sudo yum install java-11-openjdk
验证 Java 安装:
java -version
3. 安装 ZooKeeper
Kafka 使用 ZooKeeper 进行节点管理和协调,需要先安装并启动 ZooKeeper。
3.1 下载并解压 ZooKeeper
wget https://downloads.apache.org/zookeeper/zookeeper-3.8.2/apache-zookeeper-3.8.2-bin.tar.gz
tar -xzvf apache-zookeeper-3.8.2-bin.tar.gz
mv apache-zookeeper-3.8.2-bin /usr/local/zookeeper
3.2 配置 ZooKeeper
-
创建数据目录:
mkdir -p /var/lib/zookeeper -
复制配置文件:
cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg -
编辑配置文件
/usr/local/zookeeper/conf/zoo.cfg:dataDir=/var/lib/zookeeper clientPort=2181
3.3 启动 ZooKeeper
/usr/local/zookeeper/bin/zkServer.sh start
3.4 验证 ZooKeeper 是否正常运行
/usr/local/zookeeper/bin/zkCli.sh -server localhost:2181
在连接成功后输入 ls /,若返回空列表([]),则说明连接成功。
4. 安装 Kafka
4.1 下载并解压 Kafka
访问 Kafka 官网 下载最新版本的 Kafka。
wget https://downloads.apache.org/kafka/3.5.0/kafka_2.12-3.5.0.tgz
tar -xzvf kafka_2.12-3.5.0.tgz
mv kafka_2.12-3.5.0 /usr/local/kafka
4.2 配置 Kafka
编辑 Kafka 的配置文件 /usr/local/kafka/config/server.properties:
# Kafka Broker ID,唯一标识符
broker.id=0# 监听的接口和端口
listeners=PLAINTEXT://:9092# 日志文件存储路径
log.dirs=/var/lib/kafka-logs# Zookeeper 连接地址
zookeeper.connect=localhost:2181
4.3 创建日志目录
mkdir -p /var/lib/kafka-logs
4.4 启动 Kafka Broker
/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
4.5 验证 Kafka 是否正常运行
创建一个测试 Topic:
/usr/local/kafka/bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
列出 Topic:
/usr/local/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
你应该看到 test-topic 在列出的 Topic 中。
5. Kafka 单机部署的注意事项
- ZooKeeper:确保 ZooKeeper 正常运行,并且
zookeeper.connect地址配置正确。 - 内存和存储:为 Kafka 分配足够的内存和存储空间,尤其是在高负载场景下。
- 日志文件:定期检查和清理 Kafka 日志文件,以防止磁盘占满。
- 监听地址:如果需要远程访问,确保
listeners配置了正确的监听地址。 - 防火墙设置:确保防火墙开放了 Kafka 和 ZooKeeper 使用的端口(默认 9092 和 2181)。
二、Kafka 集群环境部署
Kafka 集群由多个 Kafka Broker 组成,能够提供高可用性和水平扩展。
1. 环境准备
- 多台服务器:至少 3 台(3 个 Kafka Broker 和 3 个 ZooKeeper 实例)
- 操作系统:Linux(推荐 Ubuntu 20.04 或 CentOS 7)
- Java:在所有节点上安装 Java
2. 安装 ZooKeeper 集群
在每台服务器上按照单机部署的步骤安装 ZooKeeper,并进行以下配置:
2.1 配置 ZooKeeper 节点 ID
编辑每个节点的 zoo.cfg 文件,添加如下配置:
server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888
在每台服务器上创建 myid 文件,用于标识节点:
echo "1" > /var/lib/zookeeper/myid # 在 zookeeper1 上
echo "2" > /var/lib/zookeeper/myid # 在 zookeeper2 上
echo "3" > /var/lib/zookeeper/myid # 在 zookeeper3 上
2.2 启动 ZooKeeper 集群
在每台服务器上启动 ZooKeeper:
/usr/local/zookeeper/bin/zkServer.sh start
3. 安装 Kafka 集群
在每台服务器上按照单机部署的步骤安装 Kafka,并进行以下配置:
3.1 配置 Kafka Broker
编辑每个节点的 server.properties 文件,添加如下配置:
broker.id=0 # 每个 Broker 唯一 ID
listeners=PLAINTEXT://:9092
log.dirs=/var/lib/kafka-logs
zookeeper.connect=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
3.2 启动 Kafka Broker
在每台服务器上启动 Kafka Broker:
/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
4. 验证 Kafka 集群状态
4.1 创建 Topic
在任一 Kafka Broker 上执行以下命令:
/usr/local/kafka/bin/kafka-topics.sh --create --topic test-topic --bootstrap-server kafka1:9092,kafka2:9092,kafka3:9092 --partitions 3 --replication-factor 3
4.2 验证 Topic
列出集群中的 Topic:
/usr/local/kafka/bin/kafka-topics.sh --list --bootstrap-server kafka1:9092
查看 Topic 详细信息:
/usr/local/kafka/bin/kafka-topics.sh --describe --topic test-topic --bootstrap-server kafka1:9092
5. Kafka 集群部署的注意事项
- ZooKeeper 集群:确保每个节点配置了正确的
myid,并且所有节点可以互相通信。 - Kafka Broker 配置:每个 Broker 必须有唯一的
broker.id。 - 分区和副本:根据实际需求配置合适的分区数和副本数,以提高数据可靠性和吞吐量。
- 监控和报警:使用 Kafka Manager 或其他监控工具监控集群状态,及时处理故障。
- 网络配置:确保各节点之间的网络连接正常,并且防火墙开放了必要端口。
- 资源规划:为 Kafka 和 ZooKeeper 分配足够的 CPU、内存和磁盘资源。
三、Kafka 使用案例:生产者和消费者
1. 使用 Java 实现 Kafka 生产者和消费者
1.1 添加依赖
在 Maven 项目中添加 Kafka 的依赖:
<dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.5.0</version>
</dependency>
1.2 编写 Kafka 生产者
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;import java.util.Properties;public class SimpleProducer {public static void main(String[] args) {// Kafka 生产者配置Properties props = new Properties();props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");// 创建生产者Producer<String, String> producer = new KafkaProducer<>(props);// 发送消息for (int i = 0; i < 10; i++) {ProducerRecord<String, String> record = new ProducerRecord<>("test-topic", Integer.toString(i), "Message " + i);producer.send(record);}// 关闭生产者producer.close();}
}
1.3 编写 Kafka 消费者
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.clients.consumer.ConsumerRecord;import java.util.Collections;
import java.util.Properties;public class SimpleConsumer {public static void main(String[] args) {// Kafka 消费者配置Properties props = new Properties();props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");props.put(ConsumerConfig.GROUP_ID_CONFIG, "test-group");props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");// 创建消费者KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);// 订阅主题consumer.subscribe(Collections.singletonList("test-topic"));// 轮询消息while (true) {ConsumerRecords<String, String> records = consumer.poll(100);for (ConsumerRecord<String, String> record : records) {System.out.printf("Offset = %d, Key = %s, Value = %s%n", record.offset(), record.key(), record.value());}}}
}
1.4 运行 Java 程序
编译并运行生产者:
mvn compile
mvn exec:java -Dexec.mainClass="SimpleProducer"
编译并运行消费者:
mvn exec:java -Dexec.mainClass="SimpleConsumer"
2. 使用 Python 实现 Kafka 生产者和消费者
2.1 安装 Kafka 库
pip install kafka-python
2.2 编写 Kafka 生产者
from kafka import KafkaProducer# 创建 Kafka 生产者
producer = KafkaProducer(bootstrap_servers='localhost:9092')# 发送消息
for i in range(10):producer.send('test-topic', key=bytes(str(i), encoding='utf-8'), value=bytes(f'Message {i}', encoding='utf-8'))# 关闭生产者
producer.close()
2.3 编写 Kafka 消费者
from kafka import KafkaConsumer# 创建 Kafka 消费者
consumer = KafkaConsumer('test-topic',bootstrap_servers='localhost:9092',group_id='test-group',auto_offset_reset='earliest'
)# 轮询消息
for message in consumer:print(f'Offset = {message.offset}, Key = {message.key.decode()}, Value = {message.value.decode()}')
2.4 运行 Python 程序
运行生产者:
python kafka_producer.py
运行消费者:
python kafka_consumer.py
3. 注意事项
- 生产者和消费者配置:合理配置
bootstrap.servers、key.serializer、value.serializer、group.id等参数。 - 分区策略:在生产者中使用自定义分区策略,可以提高吞吐量和负载均衡。
- 消费组:多个消费者实例可以组成一个消费组,以提高处理能力。
- 容错机制:在实际应用中,需要考虑重试、错误处理和幂等性等问题。
总结
通过以上步骤,我们成功部署了 Kafka 单机和集群环境,并实现了一个简单的生产者和消费者应用。Kafka 提供了高吞吐量、低延迟的消息传递能力,适合用于实时流处理和数据管道。
部署过程中的注意事项
- Java 版本:确保安装了正确版本的 Java。
- ZooKeeper 集群:确保 ZooKeeper 集群稳定运行,并配置正确。
- 网络配置:各节点之间的网络连接需要稳定,端口要开放。
- 资源配置:根据业务需求配置合适的内存、CPU 和磁盘资源。
- 数据安全:启用 Kafka 的 SSL/TLS 和 SASL 认证机制,确保数据安全传输。
- 监控和管理:使用 Kafka Manager、Prometheus 等工具监控集群状态,及时处理异常。
- 日志管理:定期检查和清理 Kafka 的日志,以防止磁盘空间不足。
通过合理的配置和优化,Kafka 可以为应用程序提供可靠的消息传递和流处理服务,是构建实时数据管道和事件驱动架构的重要组件。
相关文章:
Kafka 单机和集群环境部署教程
目录 一、Kafka 单机环境部署1. 环境准备2. 安装 Java3. 安装 ZooKeeper3.1 下载并解压 ZooKeeper3.2 配置 ZooKeeper3.3 启动 ZooKeeper3.4 验证 ZooKeeper 是否正常运行 4. 安装 Kafka4.1 下载并解压 Kafka4.2 配置 Kafka4.3 创建日志目录4.4 启动 Kafka Broker4.5 验证 Kafk…...
使用Python发送PDD直播间弹幕(协议算法分析)
文章目录 1. 写在前面2. 接口分析3. 算法还原 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…...
1056. Mice and Rice (25)-PAT甲级真题
当时没想到可以用队列来做,就傻傻的模拟了,用cur存当前轮的id,这个id对应的是order的下标,这里有个求rank的技巧就是当前轮没有晋级的rank为(当前轮的组数1) 模拟: #include<bits/stdc.h&g…...
色轮在数据可视化中的应用
在数据可视化中,色彩的运用不仅仅是为了美观,更是为了传达信息、区分数据和提升图表的易读性。本文探讨色轮及其色彩公式的应用,帮助大家更好地运用色彩来提升数据可视化的效果。 1、色轮的基础概念 色轮是一个用于表示颜色之间关系的图形工…...
编程-设计模式 8:组合模式
设计模式 8:组合模式 定义与目的 定义:组合模式又称为部分-整体模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。目的:该模式的主要目的是将多个对象…...
c语言指针(8.11)
那这样p和*p记录的地址不一样了吗? 不,p 和 *p 记录的地址在某种意义上是“相同”的,但它们在类型和使用方式上有所不同。 p 的地址:p 是一个指针,它本身存储了一个地址,这个地址是二维数组 arr 的第一行&a…...
加密技术的发展
加密是一种用于保护数据安全的技术,通过将原始信息(明文)转换为一种不可读的形式(密文),确保只有拥有正确解密密钥的人才能访问其真实内容。加密技术在现代社会中被广泛应用于各种场景,包括但不…...
编程-设计模式 22:策略模式
设计模式 22:策略模式 定义与目的 定义:策略模式定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户。目的:该模式的主要目的是将一组相关的算法封装成一系列可…...
kafka 将log4j的项目升级到log4j2
kafka版本是kafka_2.11-2.0.0,由于引用的log4j有漏洞,而升级kafka可能影响比较大,所以更新log4j包的版本。 参考的是将log4j的项目升级到log4j2 主要步骤如下: cd kafka的目录 cd libs rm -f slf4j-log4j12-1.7.25.jar rm -f …...
【CSP2019 模拟赛】Time
题目描述: 小 A 现在有一个长度为 𝑛 的序列 {𝑥𝑖},但是小 A 认为这个序列不够优美。 小 A 认为一个序列是优美的,当且仅当存在 𝑘 ∈ [1, 𝑛],满足: &#…...
二叉树相关的算法题
二叉树相关的算法题 单值二叉树 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,才返回 true;否则返回 false。 示例 1: 输入:[1,1,1,1,1,null,1] 输出:t…...
Unity URP 曲面细分学习笔记
学百人时遇到了曲面着色器的内容,有点糊里糊涂,于是上知乎找到了两篇大佬的文章 Unity URP 曲面细分 和 Unity曲面细分笔记,本文只是自己做学习记录使用 1.曲面细分与镶嵌 曲面细分或细分曲面(Subdivision surface)是…...
每天五分钟深度学习pytorch:训练神经网络模型的基本步骤
本文重点 本文个人认为是本专栏最重要的章节内容之一,前面我们学习了pytorch中的基本数据tensor,后面我们就将学学习深度学习模型的内容了,在学习之前,我们先来看一下我们使用pytorch框架训练神经网络模型的基本步骤,然后我们下面就将这些步骤分解开来,详细学习。 代码…...
【langchain学习】使用缓存优化langchain中的LLM调用性能:内存、SQLite与Redis的对比
在处理语言模型(LLM)调用时,特别是在需要多次执行相同请求的情况下,缓存机制能够显著提升系统的性能。本文通过对比内存缓存(InMemoryCache)、SQLite缓存(SQLiteCache)和Redis缓存(RedisCache),探讨了如何在Langchain中使用这些缓存机制来优化LLM调用的性能。 代码…...
spring boot 集成EasyExcel
EasyExcel 是一个基于 Java 的快速、简洁的 Excel 处理工具,它能够在不用考虑性能和内存等因素的情况下,快速完成 Excel 的读写功能。 首先,需要在 Spring Boot 项目中引入 EasyExcel 依赖。在 pom.xml 文件中添加以下依赖: <d…...
获取对象中第一个存在的值
在JavaScript中,要从一个对象中获取第一个存在的(非undefined、非null、非空数组等)值,你可以使用Object.values()方法结合Array.prototype.find()方法。以下是一个示例代码,演示如何实现这一点: const ob…...
Python学习笔记----集合与字典
1. 字符串、列表和元组的元素都是按下标顺序排列,可通过下 标直接访问,这样的数据类型统称为序列。 其中,字符串和元组中的元素不能修改,而列表中的元素可以修改。 集合 1. 与元组和列表类似,Set (集合&a…...
c# 排序、强转枚举
List<Tuple<double,int>> mm中doble从小到大排序 mm本身排序 在C#中,如果你有一个List<Tuple<double, int>>类型的集合mm,并且你想要根据Tuple中的double值(即第一个元素)从小到大进行排序,同…...
“华为杯”第十六届中国研究生数学建模竞赛-C题:视觉情报信息分析
目录 摘 要: 一、问题重述 二、模型假设 三、符号说明 四、问题一分析与求解 4.1 问题一分析 4.2 模型建立 4.2.1 位置变换模型建立 4.2.4 多平面转换模型建立 4.3 模型求解 4.3.1 问题一图 1 结果 4.3.2 问题一图 2 结果 4.3.3 问题一图 3 结果 4.3.4 问题一图 4 结果 4.4 模…...
html+css+js网页设计 找法网2个页面(带js)ui还原度百分之90
htmlcssjs网页设计 找法网2个页面(带js)ui还原度百分之90 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑…...
无机布防火卷帘门报价透明,包工包料,一次说清所有费用
很多客户在选购无机布防火卷帘门时,最关心实际成交价格,也担心报价不清晰,后期产生各类额外支出。行业内产品定价参差不齐,选材做工不同,最终价位自然存在差距,挑选时不能只看表面低价。 👉 点击…...
量子计算中Loschmidt回声相位测量的创新方法
1. 量子计算中的Loschmidt回声相位测量方法概述Loschmidt回声是量子动力学中一个重要的概念,它描述了量子系统在时间反演演化后与初始状态的相似程度。在量子计算领域,精确测量Loschmidt回声的相位信息对于理解量子系统的非平衡态行为、计算能量本征值以…...
浅聊26上半年软考架构师
2026年上半年架构师考试已然落幕,大家都考的如何?架构师共有三门考试,上午综合知识(75道选择题)案例分析,时间为8.30-12.30;下午论文,时间为14.30-16.30。下面说说我整体的备考过程。…...
腾讯 Marvis 初级使用教程——从安装到上手
腾讯最新系统级AI助手Marvis(2026年5月20日发布),官网 https://marvis.qq.com,主打“一句话操作电脑”、跨端协同、GUI Agent执行。虽然是个【小龙虾】,但上手其实不难。这篇就简单写写 Marvis 的安装和基础使用&#…...
如何快速解锁艾尔登法环帧率限制:终极性能优化指南
如何快速解锁艾尔登法环帧率限制:终极性能优化指南 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_mirrors/el/EldenR…...
国内大学生常用的AI写作辅助平台有哪些?
国内高校学生常用的 AI 写作辅助平台,以本土化全流程工具为主,结合通用大模型与专项功能模块,覆盖选题构思、大纲搭建、初稿撰写、语言润色、降重处理、查重检测及格式排版等关键环节,以下是主流平台详解与对比: 一、本…...
AutoWall终极指南:如何在Windows上轻松设置炫酷动态壁纸
AutoWall终极指南:如何在Windows上轻松设置炫酷动态壁纸 【免费下载链接】AutoWall 🌌 Live wallpapers on Windows 7/8/10/11 using open-source wallpaper engine 项目地址: https://gitcode.com/gh_mirrors/au/AutoWall 厌倦了千篇一律的静态桌…...
收藏|2026年大模型算法岗崛起!程序员小白入门高薪赛道全攻略
前些年,算法岗位一直稳居技术圈高薪行列,无数程序员争相入局,也成为计算机专业毕业生求职首选方向。 伴随大模型技术飞速迭代落地,行业就业格局迎来重大变革。如今含金量最高、人才缺口最大、长期发展潜力顶尖的岗位,已…...
USB数据隔离器DIY:物理切断数据线,防范充电攻击
1. 移动设备充电安全:一个被忽视的“物理后门”你可能每天都在做这件事:手机或平板电脑电量告急,随手拿起一根数据线,插在办公室的公共电脑、机场的充电站,甚至是朋友提供的充电宝上。这看起来再平常不过了,…...
终极指南:5步掌握Cursor AI Pro完整功能免费解锁技巧
终极指南:5步掌握Cursor AI Pro完整功能免费解锁技巧 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tria…...
