Kafka入门:基础架构讲解,安装与使用

目录

基础架构

Producer(生产者)

Broker

Consumer(消费者)

Zookeeper

其他

启动Kafka

安装

本地启动

Docker部署

创建Topic

发送与消费消息


基础架构

Producer(生产者)

负责将消息发送到 Kafka 集群(Broker 节点)。

  • 消息封装:生产者将数据(如日志、事件等)封装成 <Key, Value> 键值对形式的消息。
  • 分区策略 :根据消息的 Key 或自定义规则,决定消息发送到Topic 的哪个分区(Partition),以实现负载均衡和顺序性控制。
  • 批量发送:通过缓冲区批量发送消息(默认 64KB 或 500ms 触发),提升吞吐量。
  • 重试机制:当发送失败时,自动重试(可配置重试次数和间隔)。

Broker

Kafka 集群中的服务器节点,负责存储消息、处理生产者 / 消费者的请求。

  • 存储消息 :消息按 **Topic 分区(Partition)**存储在磁盘上,每个分区是有序、不可变的日志文件。
  • 副本机制每个分区有 1 个 Leader 副本和多个 Follower 副本,Leader 处理读写请求,Follower 同步 Leader 数据,实现高可用
  • 分区管理:由 Controller 节点(集群中选举出的主节点)负责分区 Leader 选举、副本分配等。
  • 数据清理:通过日志保留策略(时间或大小)自动删除过期消息,释放磁盘空间。

Consumer(消费者)

从 Kafka 集群订阅并消费消息。

  • 消费组(Consumer Group) :多个消费者组成一个消费组,共同消费一个 Topic 的分区,每个分区只能被消费组内的一个消费者消费(避免重复消费)。
  • 位移(Offset) :记录消费者已消费的消息位置(保存在 __consumer_offsets 内部 Topic 中),支持从指定位置重新消费。
  • 消费模式
    • 自动提交位移:定期自动提交已消费的 Offset(可能重复消费或丢失消息)。
    • 手动提交位移:消费完成后手动提交,确保消息不丢失。
  • 再平衡(Rebalance):当消费组内消费者数量变化或分区数量变化时,重新分配分区与消费者的对应关系(可能导致短暂消费停顿)。

Zookeeper

  • **集群元数据管理:**记录所有Broker节点的信息,Topic的元数据(名称、分区数量、副本数量、每个分区的 Leader/Follower 副本分布等),消费者组的元数据
  • **Broker 集群协调:**Leader的选举,副本故障转移,注册与发现Broker
  • **消费者组协调:**记录消费者组信息,实现Rebalance机制

在Kafka2.8以后,Zookeeper逐渐被KRaft模式取代。为什么要取代Zookeeper?

  • 性能瓶颈 :ZooKeeper 处理元数据变更的效率有限,当 Kafka 集群规模(Broker/Topic/ 分区数量)过大时,可能成为瓶颈。
  • 复杂性 :引入 ZooKeeper 增加了集群部署、维护的复杂度(需单独管理 ZooKeeper 集群)。
  • 一致性模型 :ZooKeeper 的强一致性模型与 Kafka 追求的高吞吐需求不完全匹配

其他

  • Topic:可以理解为一个队列,生产者和消费者面向的都是一个 topic。
  • Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服 务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列。
  • Replica:副本。一个 topic 的每个分区都有若干个副本,一个 Leader 和若干个 Follower。
  • Leader:每个分区多个副本的"主",生产者发送数据的对象,以及消费者消费数 据的对象都是 Leader。
  • Follower:每个分区多个副本中的"从",实时从 Leader 中同步数据,保持和 Leader 数据的同步。Leader 发生故障时,某个 Follower 会成为新的 Leader。

启动Kafka

安装

进入官网https://kafka.apache.org/可以下载最新版本的Kafka,接下来讲解如何在Linux部署Kafka。

$ tar -xzf kafka_2.13-4.1.0.tgz

$ cd kafka_2.13-4.1.0

本地启动

此版本需要JDK17+。

生成集群 UUID

KAFKA_CLUSTER_ID="(bin/kafka-storage.sh random-uuid)"

格式化日志目录

bin/kafka-storage.sh format --standalone -t KAFKA_CLUSTER_ID -c config/server.properties

启动Kafka服务器

$ bin/kafka-server-start.sh config/server.properties

Docker部署

获取 Docker 镜像:

$ docker pull apache/kafka:4.1.0

启动 Kafka Docker 容器:

$ docker run -p 9092:9092 apache/kafka:4.1.0

创建Topic

创建Topic

$ bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092

接下来就可以通过Kafka发送和消费消息了。

发送与消费消息

Kafka 客户端通过网络与 Kafka Broker 通信,以写入(或读取)消息。一旦收到消息,Broker 就会将消息持久化到磁盘,存储时间可根据需要延长,甚至永久保存。

运行控制台生产者客户端,将一些事件写入Topic。默认情况下,输入的每一行都会将一个单独的事件写入主题。

$ bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
>This is my first event
>This is my second event

Ctrl-C可以随时停止生产者客户端。
打开另一个终端会话并运行控制台消费者客户端来读取刚刚创建的事件:
$ bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092 This is my first event This is my second event

相关推荐
神秘的土鸡3 小时前
从数据仓库到数据中台再到数据飞轮:我的数据技术成长之路
java·服务器·aigc·数据库架构·1024程序员节
vir023 小时前
P1928 外星密码(dfs)
java·数据结构·算法·深度优先·1024程序员节
摇滚侠3 小时前
全面掌握PostgreSQL关系型数据库,备份和恢复,笔记46和笔记47
java·数据库·笔记·postgresql·1024程序员节
eguid_15 小时前
【开源项目分享】JNSM1.2.0,支持批量管理的jar包安装成Windows服务可视化工具,基于Java实现的支持批量管理已经安装服务的可视化工具
java·开源·jar·1024程序员节·windows服务·jar包安装成服务·exe安装成服务
杯莫停丶5 小时前
设计模式之:享元模式
java·设计模式·享元模式
遥远_6 小时前
Java微服务无损发布生产案例
java·spring·微服务·优雅停机·java微服务无损发布
苹果醋36 小时前
学习札记-Java8系列-1-Java8新特性简介&为什么要学习Java8
java·运维·spring boot·mysql·nginx
武子康6 小时前
Java-159 MongoDB 副本集容器化 10 分钟速查卡|keyfile + –auth + 幂等 init 附 docker-compose
java·数据库·mongodb·docker·性能优化·nosql·1024程序员节
鼠鼠我捏,要死了捏6 小时前
Kafka消息可靠性方案对比与实践
kafka·rabbitmq·消息可靠性