当前位置: 首页 > news >正文

【Note】《Kafka: The Definitive Guide》 第二章 Installing Kafka:Kafka 安装与运行

《Kafka: The Definitive Guide》 第二章 Installing Kafka:Kafka 安装与运行

本章核心目标是教读者如何在本地搭建 Kafka,包括依赖安装、启动服务、测试运行等操作。


一、Kafka 的依赖与基本结构

1. Kafka 的核心组成

Kafka 并不是一个单独运行的进程,它依赖以下两个核心组件:

组件作用
ZooKeeperKafka 用于存储元数据(如 broker 注册信息、controller 选举)
Kafka Broker接收、存储和发送消息的进程,Kafka 的主要服务单元

⚠️ 注意:虽然 Kafka 现在在逐步引入 “KRaft” 模式以替代 ZooKeeper,但在本章及大多数 Kafka 2.x ~ 3.x 的安装中,ZooKeeper 仍是必需的

2. 所需环境
依赖项说明
Java JDK 8+Kafka 是 Java 编写的,运行依赖 JDK
Linux/macOS/WSL官方推荐在类 Unix 环境运行 Kafka
Kafka 二进制包可从 https://kafka.apache.org/downloads 获取

二、安装与配置 Kafka 步骤(以本地单节点为例)

1. 下载并解压 Kafka
wget https://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz
tar -xzf kafka_2.13-3.6.1.tgz
cd kafka_2.13-3.6.1
  • Kafka 有多个版本(Scala 2.12 / 2.13),需选择与你的 Spark/Flink 环境匹配的版本。
2. 启动 ZooKeeper
bin/zookeeper-server-start.sh config/zookeeper.properties
  • 运行前可检查 config/zookeeper.properties 中的 dataDir、端口(默认 2181)。
3. 启动 Kafka Broker
bin/kafka-server-start.sh config/server.properties
  • 检查 config/server.properties 中以下配置:

    • broker.id:每个 Kafka 实例的唯一 ID;
    • log.dirs:Kafka 存储数据的路径;
    • zookeeper.connect:ZooKeeper 的连接地址。

✅ 成功启动后,Kafka Broker 会监听默认端口 9092


三、Kafka 命令行工具测试(Topic 与消息)

Kafka 提供了多个命令行工具用于管理 Topic 与调试:

创建 Topic
bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
查看 Topic 列表
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
启动一个生产者发送消息
bin/kafka-console-producer.sh --topic test --bootstrap-server localhost:9092

然后输入一些消息回车发送。

启动一个消费者接收消息
bin/kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server localhost:9092

⚠️ 四、使用过程中常见注意事项

⚠️ 1. ZooKeeper 一定要先启动

Kafka 启动时需要连接 ZooKeeper,否则会失败报错 “Connection refused to ZooKeeper”。

⚠️ 2. 确认端口未被占用
  • 默认端口:

    • Kafka: 9092
    • ZooKeeper: 2181
  • 如果端口被占用,服务可能启动失败,需要修改配置文件中的端口或释放端口。

⚠️ 3. 修改 server.properties 时注意:
配置项说明
broker.id对于集群环境应唯一(单机可以为 0)
log.retention.hours消息保留时间,默认 168 小时(7 天)
num.partitions默认每个 Topic 分区数,可调
⚠️ 4. 多窗口同时使用时注意目录不要混乱
  • 推荐在多个终端 tab 中运行 ZooKeeper、Kafka、producer、consumer;
  • 如果在 Docker 中部署,注意挂载数据卷、配置外部访问地址(如 advertised.listeners)。

五、Kafka 的 Web 管理工具(可选)

安装好本地 Kafka 后,你可能想可视化管理:

工具说明
Kafka UI功能强大,支持查看 Topic、消费组等
Kafka ToolGUI 客户端(Windows/macOS)
AKHQ另一个好用的 Web UI,适合生产环境

总结:章节关键要点

类别注意事项
环境确保安装 JDK,使用类 Unix 环境更顺利
启动顺序先启动 ZooKeeper,再启动 Kafka
配置文件熟悉 server.propertieszookeeper.properties 结构
常用命令掌握 topic 创建、生产消费、查看命令
多窗口操作推荐使用 tmux 或多终端 tab 并行操作
UI 工具Kafka UI 工具可以极大提升管理效率

kafka是java专属?其他语言怎么使用啊?

C++ 可以使用 Kafka 服务,主要基于 Kafka 的跨语言通信协议设计和客户端支持机制

Kafka 通信协议的语言无关性

Kafka Broker 和客户端之间通信基于一个自定义的二进制协议,该协议通过 TCP 套接字传输数据。协议本身是语言无关的,只要客户端能够按协议格式正确地构造请求、解析响应,就能和 Kafka Broker 交互。

  • 请求/响应模型:客户端向 Broker 发送请求(如发送消息、拉取消息、管理 Topic 等),Broker 返回响应数据。
  • 数据格式:请求和响应采用固定的二进制格式(含长度、API key、版本号等),严格定义在 Kafka 协议规范里。
  • 因此,只要用 C++ 实现该协议的编解码,就能实现完整的 Kafka 客户端功能。

Kafka 官方并未直接提供 C++ 客户端,但社区有成熟方案

  • Kafka 官方维护的客户端主要是 Java、Scala。

  • Confluent 和其他社区开发了多种非 Java 语言客户端:

    • librdkafka:由 Edenhill 开发的 C/C++ Kafka 客户端库,广泛使用且性能稳定,是 C++ 生态中事实标准。
    • 其它语言客户端(Python, Go, C# 等)也都是基于类似原理,按协议实现交互。

C++ 使用 Kafka 的关键要素

Kafka Broker 端协议兼容
  • Kafka Broker 端口(默认9092)接收客户端请求,无论请求来自哪个语言实现,只要协议格式正确,Broker 都能识别。
  • 协议版本不断迭代,C++ 客户端需要跟上协议版本(比如支持新特性)。
C++ 客户端库(librdkafka)
  • librdkafka 提供:

    • Producer、Consumer API;
    • 底层网络通信、请求编码/解码;
    • 支持多线程安全;
    • 支持高性能异步生产和消费;
    • 支持高级特性如事务、幂等性。
  • 用户只需调用 C++ API,配置 Broker 地址、Topic 等,即可方便操作 Kafka。

异步事件模型
  • Kafka 设计支持高吞吐异步通信,librdkafka 通过事件回调、队列机制实现异步非阻塞;
  • C++ 开发者可以结合自身业务模型设计异步处理逻辑。
依赖环境
  • 需要在系统安装和编译 librdkafka;
  • 运行时依赖 OpenSSL(支持加密传输)、zlib(压缩)等库。

简单示意:C++ 调用 Kafka 的流程

+-------------------+
|  C++ librdkafka API| -- 构造请求 --> TCP Socket --> Kafka Broker
|                   | <-- 响应数据 --/
+-------------------+
  • 初始化配置(broker 列表、序列化方式、消费者组等);
  • 创建 Producer 或 Consumer 实例;
  • 生产或消费消息(异步发送或拉取);
  • 处理回调事件(成功、失败、消息处理等);
  • 关闭客户端,释放资源。

小结

关键要素说明
协议语言无关Kafka 的通信协议与语言无关,任何语言都可实现
C++ 客户端库主要是 librdkafka 提供稳定高性能的实现
异步高效支持异步事件模型,满足高吞吐要求
跨平台兼容适配多操作系统和编译环境
丰富特性支持支持事务、幂等性、分区管理等 Kafka 重要特性

http://www.dtcms.com/a/267836.html

相关文章:

  • Redis--主从复制详解
  • 【Docker基础】Docker容器挂载方式深度解析:--volume与--mount参数对比
  • QT6 源(155)模型视图架构里的列表视图 QListView:接着学习成员函数,信号函数,附上本类的源代码带注释。
  • HCIA-网络地址转换(NAT)
  • CppCon 2018 学习:Woes of Scope Guards and Unique_Resource
  • 抖音小游戏(IAA)巨量引擎投放指南
  • [shadPS4] 内存管理 | 权限管理 |文件系统 | 挂载和句柄
  • 【BTC】数据结构
  • 7,TCP服务器
  • JavaScript基础语法之运算符和控制流
  • 李宏毅NLP-8-语音模型
  • 【管理学】组织纪律性与创新性的失衡导致的问题
  • Redis事务机制
  • [论文阅读]VGGFace2: A dataset for recognising faces across pose and age
  • Linux-磁盘管理
  • 【前端工程化】前端工作中的业务规范有哪些
  • 基于评估方法论评估一个大模型的准确度
  • 文心开源大模型ERNIE-4.5-0.3B-Paddle私有化部署保姆级教程及技术架构探索
  • Java面试宝典:网络编程
  • 基于Pandas和FineBI的昆明职位数据分析与可视化实现(五) - 基于随机森林算法预测职位分类
  • 【星闪】Hi2821 | Pinctrl、GPIO + LED灯和按键输入例程
  • 字符函数和字符串函数(下)- 暴力匹配算法
  • python pip 下载慢
  • 在 Dokploy 中为 PostgreSQL 搭建 PgBouncer 数据库连接池(图文)
  • 【influxdb3】如何使用 SQL 对时间序列数据进行聚合查询
  • Golang读取ZIP压缩包并显示Gin静态html网站
  • 51c大模型~合集150
  • 大型语言模型中的自动化思维链提示
  • unity校招岗面试题 天津某场 深圳某场
  • spring中@Transactional注解和事务的实战理解附代码