乐途乐途
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
  • 学习路径
  • 第1章 消息队列与 Kafka 概述

    • 章节导读
    • 消息队列基础
    • Kafka 概述
    • Kafka 为什么快
  • 第2章 快速上手:单机环境搭建

    • 章节导读
    • 环境准备与安装
    • 快速启动
    • Topic 管理
  • 第3章 核心概念:主题、分区与日志

    • 章节导读
    • Topic
    • Partition
    • Offset
    • Segment 与存储结构
  • 第4章 生产者详解

    • 章节导读
    • Producer 概述
    • Producer 发送机制
    • Producer 分区策略
    • Producer 幂等与事务
    • Producer 配置
  • 第5章 消费者与消费组

    • 章节导读
    • Consumer 概述
    • Consumer Group 消费组
    • Consumer 分区分配策略
    • Consumer Offset 提交
    • Consumer 多线程
    • Consumer 配置
  • 第6章 Broker 与控制器

    • 章节导读
    • Broker 概述
    • Broker 配置
    • Controller
    • KRaft 共识协议
  • 第7章 副本与数据可靠性

    • 章节导读
    • 副本机制
    • ISR 与副本同步
    • Leader 选举
    • ACK 与一致性保证
    • 高水位与 Leader Epoch
  • 第8章 存储与性能优化

    • 章节导读
    • 存储架构
    • 日志清理与压缩
    • Page Cache 与零拷贝
    • Producer 性能优化
    • Consumer 性能优化
    • Broker 性能优化
  • 第9章 生产环境运维与监控

    • 章节导读
    • Topic 管理
    • Kafka 运维工具
    • 监控
    • 常见故障排查
  • 第10章 Kafka生态与面试考点

    • 章节导读
    • Kafka 生态全景
    • 面试高频 30 题

快速启动

定义与作用

本节完成 Kafka 的启动、第一条消息的发送与消费。这是每一个 Kafka 初学者的"Hello World"时刻——通过实际操作建立对"生产者→Broker→消费者"数据流的感性认识。

核心原理

Kafka 的启动流程(KRaft 模式):

完整示例

示例一:后台启动 Kafka 并验证

操作前环境:已完成 KRaft 格式化(参考 环境准备与安装.md)。

步骤:

cd /opt/kafka

# 1. 后台启动 Kafka
bin/kafka-server-start.sh -daemon config/kraft/server.properties

# 2. 等待 5 秒让 Kafka 完全启动
sleep 5

# 3. 验证进程存在
jps -l | grep Kafka
# 12345 kafka.Kafka

# 4. 查看启动日志(确认无 ERROR)
tail -30 /opt/kafka/logs/server.log
# ... [KafkaServer id=1] started (kafka.server.KafkaServer)
# ... Transition from STARTING to STARTED

操作后状态:

检查项预期结果
进程kafka.Kafka 进程运行中
端口9092 正在监听(`ss -tlnp
日志无 ERROR 级别日志,最后一行含 "started"

示例二:发送与消费第一条消息

场景:使用 Kafka 自带的命令行工具,发送消息并在另一个终端消费。

操作前环境:Kafka 已启动,Topic 尚未创建。

步骤:

# ========== 终端 1:创建 Topic 并启动 Producer ==========

# 1. 创建名为 hello-world 的 Topic
bin/kafka-topics.sh --create \
  --topic hello-world \
  --bootstrap-server localhost:9092 \
  --partitions 1 \
  --replication-factor 1
# Created topic hello-world.

# 2. 启动 Console Producer(命令行生产者)
bin/kafka-console-producer.sh \
  --topic hello-world \
  --bootstrap-server localhost:9092
> Hello Kafka!
> 这是我的第一条消息
> {"user":"alice","action":"login","timestamp":1718208000}

# ========== 终端 2:启动 Consumer ==========

# 3. 启动 Console Consumer(从最早的消息开始消费)
bin/kafka-console-consumer.sh \
  --topic hello-world \
  --from-beginning \
  --bootstrap-server localhost:9092
# Hello Kafka!
# 这是我的第一条消息
# {"user":"alice","action":"login","timestamp":1718208000}

操作前后对比:

阶段Topic 状态消息数
操作前不存在0
--create 后存在,1 分区,1 副本0
Producer 发送 3 条后存在3
Consumer 消费后存在3(消息仍在,可重复消费)

关键观察:Consumer 消费后消息仍然存在于 Kafka 中。这与 RabbitMQ(消费即删除)完全不同。可另开一个 Consumer 重新从 --from-beginning 消费,会再次看到相同消息。

启动脚本速查

脚本用途常用参数
kafka-server-start.sh启动 Broker-daemon(后台运行)
kafka-server-stop.sh停止 Broker无
kafka-topics.shTopic 管理--create / --list / --describe / --delete
kafka-console-producer.sh命令行生产者--topic / --bootstrap-server
kafka-console-consumer.sh命令行消费者--topic / --from-beginning / --group
kafka-storage.sh存储格式化(KRaft)random-uuid / format

易错场景

易错 1:Producer 发送成功但 Consumer 看不到消息

现象:Producer 发送消息无报错,但 Consumer 无输出。

原因分析:

可能原因 1:Consumer 没有加 --from-beginning,默认只消费启动后的新消息。
可能原因 2:Consumer 和 Producer 连接了不同的 Bootstrap Server。
可能原因 3:Consumer 使用了与之前相同的 Group ID,且 offset 已提交到末尾。

诊断命令:

# 检查 Topic 是否存在且消息数 > 0
bin/kafka-run-class.sh kafka.tools.GetOffsetShell \
  --topic hello-world --time -2 --bootstrap-server localhost:9092
# hello-world:0:0  ← 最早 offset 为 0

bin/kafka-run-class.sh kafka.tools.GetOffsetShell \
  --topic hello-world --time -1 --bootstrap-server localhost:9092
# hello-world:0:3  ← 最新 offset 为 3,说明有 3 条消息

# 确认消息在 Kafka 中存在后,Consumer 加 --from-beginning 重试

易错 2:端口被占用

现象:

java.net.BindException: Address already in use

解决:

# 查找占用 9092 端口的进程
lsof -i :9092
# 或
ss -tlnp | grep 9092
kill <PID>

面试高频考点

Q:--from-beginning 的实际含义是什么?

A:它告诉 Consumer 将其 offset 重置到 earliest(最早可用消息),而不是默认的 latest(只消费新到达的消息)。这利用了 Kafka 的消息重放特性——消息不会因被消费而删除。在真实的 Consumer API 中对应 auto.offset.reset=earliest。

上一页
环境准备与安装
下一页
Topic 管理