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编辑软件进行运行及修改编辑…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...