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

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

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

相关文章:

  • 深圳seo网站推广报价wordpress导航栏的文件在哪
  • 电手术刀VS神经调音师:解密电刺激技术差异
  • lance + duckdb 替代 parquet + pandas
  • CHIA考试报告手册
  • Linux操作系统学习之---线程互斥(互斥锁)
  • 【物联网控制体系项目实战】—— 整体架构流程与 WS 实现
  • dedecms网站后台模板做汽车网站费用
  • 做网站就上房山华网天下大型网站如何开发
  • 从「能用」到「可靠」:深入探讨C++异常安全
  • 如何让AI更好地理解中文PDF中的复杂格式?
  • Mount Image Pro,在取证安全的环境中挂载和访问镜像文件内容
  • 四元数(Quaternion)之Eigen::Quaternion使用详解(5)
  • 太平洋建设集团有限公司网站wordpress标签扩展
  • 二级域名解析网站天津效果图制作公司
  • Linux iptables:四表五链 + 实用配置
  • Ceph 简介
  • idea开启远程调试
  • UE5 蓝图-6:汽车蓝图项目的文件夹组织与运行效果图,
  • 编程竞赛小技巧
  • CrewAI 核心概念 团队(Crews)篇
  • 小九源码-springboot100-基于springboot的房屋租赁管理系统
  • 珠宝网站建设公司微信公众号推文模板素材
  • 自己可以做类似淘宝客网站吗北京公司网站制作流程
  • winform迁移:从.net framework 到 .net9
  • 计算机视觉领域顶会顶刊
  • 华为OD, 测试面经
  • 好听的公司名字大全附子seo教程
  • AiOnly深度体验:从注册到视频生成,我与“火山即梦”的创作之旅
  • 电商网站建设思维导图澧县网站建设
  • 网站app怎么制作建英语网站