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

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

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


一、Kafka 的依赖与基本结构

1. Kafka 的核心组成

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

组件 作用
ZooKeeper Kafka 用于存储元数据(如 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
bash 复制代码
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
bash 复制代码
bin/zookeeper-server-start.sh config/zookeeper.properties
  • 运行前可检查 config/zookeeper.properties 中的 dataDir、端口(默认 2181)。
3. 启动 Kafka Broker
bash 复制代码
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
bash 复制代码
bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
查看 Topic 列表
bash 复制代码
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
启动一个生产者发送消息
bash 复制代码
bin/kafka-console-producer.sh --topic test --bootstrap-server localhost:9092

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

启动一个消费者接收消息
bash 复制代码
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 Tool GUI 客户端(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 重要特性

相关推荐
亿牛云爬虫专家16 分钟前
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
分布式·python·架构·kubernetes·爬虫代理·监测·采集
群联云防护小杜6 小时前
构建分布式高防架构实现业务零中断
前端·网络·分布式·tcp/ip·安全·游戏·架构
爱吃面的猫6 小时前
大数据Hadoop之——Flink1.17.0安装与使用(非常详细)
大数据·hadoop·分布式
上上迁8 小时前
分布式生成 ID 策略的演进和最佳实践,含springBoot 实现(Java版本)
java·spring boot·分布式
长路 ㅤ   8 小时前
Java后端技术博客汇总文档
分布式·算法·技术分享·编程学习·java后端
暗影八度10 小时前
Spark流水线数据质量检查组件
大数据·分布式·spark
CodeWithMe11 小时前
【Note】《Kafka: The Definitive Guide》 第5章:深入 Kafka 内部结构,理解分布式日志系统的核心奥秘
分布式·kafka
CodeWithMe11 小时前
【Note】《Kafka: The Definitive Guide》第一章:Meet Kafka
分布式·kafka
星图易码14 小时前
能源管理综合平台——分布式能源项目一站式监控
分布式·能源