Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

  • 计算机网络

  • 设计模式

  • Java

  • Spring

  • SpringCloud

  • MySQL

  • Redis

  • 分布式

  • Zookeeper

  • Dubbo

  • Kafka

    • Kafka的架构
    • docker搭建Kafka集群
    • spring关于kafka的最全配置
    • kafka分主副节点吗
    • kafka的 topic, key , 分区的关系,以及数量对应关系,以及默认值
      • spring项目是事先创建topic还是代码里创建
      • 一个topic一般创建几个分区,几个副本数,只有三个broker的话又是怎么分布的
      • 一共有3个broker,一个topic有10个分区,副本数最大为3?分区又是怎么分布在3个broker上的?用的什么算法
      • 副本数和分区数什么区别
      • 我还是不明白副本数,请画出具体的分布图,3个broker,某个topic10个分区
      • Leader+​​Follower = 副本数?
      • ​​ISR(In-Sync Replicas)是什么,最多有多少个,这个数量怎么得来的
      • 在 Spring Kafka 中发送消息
      • 向kafka中发送重复的数据会怎么样
      • send消息时,key有什么用?
    • 数据结构

    • 算法

    • OJ

    • 从道家哲学看计算机?
    • 后端
    • Kafka
    plantre
    2025-06-22
    目录

    kafka的 topic, key , 分区的关系,以及数量对应关系,以及默认值

    Kafka 中的 Topic(主题)、Key(键) 和 分区(Partition) 是核心概念,其关系与数量对应直接影响消息的存储、分发和消费性能。以下是详细解析:


    # 🔍 一、核心关系

    概念 作用 与分区的关系
    Topic 消息的逻辑分类(如订单、日志) 一个 Topic 可划分为多个分区(Partition),分区是 Topic 的物理存储单元。
    Key 消息的标识字段(可选) 决定消息分配到哪个分区:
    • 相同 Key 的消息分配到同一分区,保证顺序性。
    Partition 物理存储单元,分区内消息有序(Offset 递增),分区间无序 分区数量决定 Topic 的并发处理能力和负载均衡能力。

    ✅ 关键机制:

    • 生产者发送消息:通过 Key 计算分区位置(哈希取模)。
    • 消费者消费消息:消费者组(Consumer Group)按分区分配消费任务,一个分区同一时刻只能被组内一个消费者消费。

    # 📊 二、数量对应关系

    场景 数量规则 影响
    Topic 分区数 vs. 消费者数 • 分区数 ≥ 消费者数:消费者可并行消费不同分区
    • 分区数 < 消费者数:部分消费者闲置
    消费者数量超过分区数会导致资源浪费。
    Key 与分区分布 • 相同 Key → 同一分区
    • 无 Key → 轮询或随机分配分区
    Key 设计不当可能导致分区数据倾斜(如大量相同 Key 导致单个分区负载过高)。
    分区数 vs. 集群性能 分区数 = max(生产吞吐量/单分区生产能力, 消费吞吐量/单分区消费能力) 分区过多增加 Broker 元数据开销,过少限制并发能力。

    ⚠️ 分区数量建议:

    • 经验值:单 Broker 管理 100-200 个分区(避免文件句柄和内存压力过大)。
    • 基准值:单分区吞吐约 10MB/s(生产) + 10MB/s(消费)。

    # ⚙️ 三、默认值配置

    配置项 默认值 说明
    Topic 分区数 1 创建 Topic 时未指定分区数则默认为 1。
    Key null 生产者发送消息时可不指定 Key,此时采用轮询策略分配分区。
    副本因子(Replication) 1 每个分区的副本数,默认 1(无冗余),生产环境建议 ≥3。
    生产者分区策略 DefaultPartitioner 按 Key 哈希或轮询分配分区。
    消费者组 ID 无默认值(必须手动配置) 消费者组标识,相同组 ID 的消费者共享分区消费任务。

    💡 示例命令:创建含 3 分区、2 副本的 Topic

    bin/kafka-topics.sh --create \
      --bootstrap-server localhost:9092 \
      --topic orders \
      --partitions 3 \          # 分区数=3
      --replication-factor 2     # 副本数=2
    
    1
    2
    3
    4
    5

    # ⚡ 四、设计建议

    1. Key 的使用场景:
      • 需顺序消费:相同业务数据(如订单 ID)设置相同 Key。
      • 需负载均衡:无 Key 或使用复合 Key(如 用户ID+时间戳)。
    2. 分区扩容:
      • Kafka 支持增加分区数(不可减少),但 Key 的分区映射会因数量变化而改变(需评估顺序性影响)。
    3. 性能调优:
      • 监控分区负载,避免倾斜(通过 kafka-topics.sh --describe 查看分区分布)。
      • 消费者数量与分区数对齐,最大化并发。

    # 💎 总结

    • Topic:逻辑消息流,物理划分为多个 分区。
    • Key:控制消息的分区归属,决定顺序性与负载均衡。
    • 默认值:分区数=1、副本数=1、Key=null(轮询策略)。
      合理设计三者的关系是优化 Kafka 吞吐、顺序性和可靠性的关键。
    编辑 (opens new window)
    上次更新: 2025/06/24, 00:41:57
    kafka分主副节点吗
    spring项目是事先创建topic还是代码里创建

    ← kafka分主副节点吗 spring项目是事先创建topic还是代码里创建→

    最近更新
    01
    集成loki
    07-04
    02
    TCP的ESTABLISHED是什么意思
    06-24
    03
    安装1panel
    06-24
    更多文章>
    Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式