学习总结录 学习总结录
首页
归档
分类
标签
  • Java基础
  • Java集合
  • MySQL
  • Redis
  • JVM
  • 多线程
  • 计算机网络
  • 操作系统
  • Spring
  • Kafka
  • Elasticsearch
  • Python
  • 面试专题
  • 案例实践
  • 工具使用
  • 项目搭建
  • 服务治理
  • ORM框架
  • 分布式组件
  • MiniSpring
  • 设计模式
  • 算法思想
  • 编码规范
友链
关于
GitHub (opens new window)
首页
归档
分类
标签
  • Java基础
  • Java集合
  • MySQL
  • Redis
  • JVM
  • 多线程
  • 计算机网络
  • 操作系统
  • Spring
  • Kafka
  • Elasticsearch
  • Python
  • 面试专题
  • 案例实践
  • 工具使用
  • 项目搭建
  • 服务治理
  • ORM框架
  • 分布式组件
  • MiniSpring
  • 设计模式
  • 算法思想
  • 编码规范
友链
关于
GitHub (opens new window)
  • Java基础

  • Java集合

  • MySQL

  • Redis

  • JVM

  • 多线程

  • 计算机网络

  • Spring

  • Kafka

    • 生产者客户端开发
    • 消费者客户端开发
    • 主题与分区管理
      • 一、主题管理
      • 二、主题的创建
      • 三、查看主题
        • 1、单个主题查看
        • 2、全部主题查看
      • 四、修改主题
      • 五、删除主题
      • 六、分区管理
        • 1、优先副本的选举
        • 2、如何选择合适的分区数
        • 3、分区数越多吞吐量就越高?
      • 参考
    • 配置管理
    • KafkaAdminClient
    • 消费管理
    • Kafka Streams
    • 日志存储
    • 可靠性研究
    • 深入服务端
    • 深入客户端
    • 集群参数配置
    • 生产者消息分区机制原理
    • 如何确保消息不丢失
    • 如何确保消息不重复消费
    • 消费积压如何处理
    • 生产者是如何管理TCP连接
    • 消费者重平衡问题
    • 位移提交问题
    • 消费者是如何管理TCP连接
    • 副本机制深入
    • 消费组消费进度如何监控
    • 高水位和Leader Epoch
  • Elasticsearch

  • Python

  • 面试专题

  • 知识库
  • Kafka
旭日
2023-04-14
目录

主题与分区管理

# 一、主题管理

主题和分区是Kafka的两大概念:

  • 主题:消息的归类
  • 分区:对消息的二次归类

其中主题的管理包括最基本创建主题、删除主题、查看主题和修改主题操作,可以通过Kafka提供的kafka-topics.sh 脚本来执行这些操作:

exec $(dirname $0)/kafka-run-class.sh kafka.admin.TopicCommand "$@"

该命令本质上是调用了kafka.admin.TopicCommand 类来执行主题管理的操作。

# 二、主题的创建

通过kafka-topics.sh脚本来创建主题:

# bin/kafka-topics.sh  --bootstrap-server localhost:9092 --create --topic quickstart-events --partitions 4 --replication-factor 1
Created topic quickstart-events.

上面的命令,创建一个分区为4,副本因子为1的主题,我们可以到对应的日志文件中查看创建的主题分区:

# ls -al kafka-logs-7a7ae42d8266 | grep quickstart-events
drwxr-xr-x 2 root root  4096 Apr 14 04:27 quickstart-events-0
drwxr-xr-x 2 root root  4096 Apr 14 04:27 quickstart-events-1
drwxr-xr-x 2 root root  4096 Apr 14 04:27 quickstart-events-2
drwxr-xr-x 2 root root  4096 Apr 14 04:27 quickstart-events-3

由于只有一个副本,相当于一个broker,因此所有的分区都在这个副本里面,先有如下情况:

  • 如果分区为4,副本因子为2、broker 数为3的情况下,按照2、3、3的分区副本个数分配给各个 broker 是最优的选择。

  • 在分区数为3、副本因子为3,并且 broker 数同样为3的情况下,分配3、3、3的分区副本个数给各个 broker 是最优的选择

image-20230414135541710

# 三、查看主题

# 1、单个主题查看

通过describe 指令类型来查看分区副本的分配细节:

# bin/kafka-topics.sh  --bootstrap-server localhost:9092 --describe --topic quickstart-events
Topic: quickstart-events        TopicId: E33Oz8TFT1SxmkXoromrEw PartitionCount: 4       ReplicationFactor: 1    Configs: segment.bytes=1073741824
        Topic: quickstart-events        Partition: 0    Leader: 0       Replicas: 0     Isr: 0
        Topic: quickstart-events        Partition: 1    Leader: 0       Replicas: 0     Isr: 0
        Topic: quickstart-events        Partition: 2    Leader: 0       Replicas: 0     Isr: 0
        Topic: quickstart-events        Partition: 3    Leader: 0       Replicas: 0     Isr: 0
  • Topic:主题名称
  • Partition:分区号
  • PartitionCount:主题下分区的数量

# 2、全部主题查看

通过 list 指令可以查看当前所有可用的主题,示例如下:

# bin/kafka-topics.sh  --bootstrap-server localhost:9092 --list
quickstart-events
quickstart-events2

describe 指令来查看单个主题信息的,如果不使用 --topic 指定主题,则会展示出所有主题的详细信息:

# bin/kafka-topics.sh  --bootstrap-server localhost:9092 --describe 
Topic: quickstart-events        TopicId: E33Oz8TFT1SxmkXoromrEw PartitionCount: 4       ReplicationFactor: 1    Configs: segment.bytes=1073741824
        Topic: quickstart-events        Partition: 0    Leader: 0       Replicas: 0     Isr: 0
        Topic: quickstart-events        Partition: 1    Leader: 0       Replicas: 0     Isr: 0
        Topic: quickstart-events        Partition: 2    Leader: 0       Replicas: 0     Isr: 0
        Topic: quickstart-events        Partition: 3    Leader: 0       Replicas: 0     Isr: 0
Topic: quickstart-events2       TopicId: Pr_rsJmrSAOCcJJ21qKgrA PartitionCount: 4       ReplicationFactor: 1    Configs: segment.bytes=1073741824
        Topic: quickstart-events2       Partition: 0    Leader: 0       Replicas: 0     Isr: 0
        Topic: quickstart-events2       Partition: 1    Leader: 0       Replicas: 0     Isr: 0
        Topic: quickstart-events2       Partition: 2    Leader: 0       Replicas: 0     Isr: 0
        Topic: quickstart-events2       Partition: 3    Leader: 0       Replicas: 0     Isr: 0

describe中的--topic还支持指定多个主题:

# bin/kafka-topics.sh  --bootstrap-server localhost:9092 --describe --topic quickstart-events,quickstart-events2

# 四、修改主题

当一个主题创建之后,我们仍然可以对其进行修改,比如修改分区个数,修改配置等,主要指令为alter:

# bin/kafka-topics.sh --bootstrap-server localhost:9092 --alter --topic quickstart-events2 --partitions 5
# bin/kafka-topics.sh --bootstrap-server localhost:9092 --alter --topic quickstart-events2 --partitions 5
# bin/kafka-topics.sh  --bootstrap-server localhost:9092 --describe --topic quickstart-events2
Topic: quickstart-events2       TopicId: Pr_rsJmrSAOCcJJ21qKgrA PartitionCount: 5       ReplicationFactor: 1    Configs: segment.bytes=1073741824
        Topic: quickstart-events2       Partition: 0    Leader: 0       Replicas: 0     Isr: 0
        Topic: quickstart-events2       Partition: 1    Leader: 0       Replicas: 0     Isr: 0
        Topic: quickstart-events2       Partition: 2    Leader: 0       Replicas: 0     Isr: 0
        Topic: quickstart-events2       Partition: 3    Leader: 0       Replicas: 0     Isr: 0
        Topic: quickstart-events2       Partition: 4    Leader: 0       Replicas: 0     Isr: 0

目前Kafka只支持增加分区,不支持减少分区。

# 五、删除主题

如果确定不再使用一个主题, 那么最好的方式是删除,这样可以释放一些资源。

bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic quickstart-events2

# 六、分区管理

# 1、优先副本的选举

分区使用多副本机制来提升可靠性,只有leader副本对外提供读写服务,

而follower副本只负责在内部进行消息的同步。为了保证可靠性,同一个分区同一个broker节点中不可能出现它的多个副本。

优先副本: 所谓的优先副本是指AR集合列表中的第一个副本,比如[1,2,0],那么这个分区的优先副本就是1。

# 2、如何选择合适的分区数

根据实际业务场景、软件条件、硬件条件、负载情况等来做具体的考量。

# 3、分区数越多吞吐量就越高?

分区是Kafka中最小的并行操作单元:

  • 对于生产者,每一个分区的数据写入是完全可以并行化的
  • 对于消费者,Kafka只允许单个分区中的消息被一个消费者线程消费,一个消费组的消费并行度完全依赖所消费的分区数。

但是并非分区数越多,吞吐量就越大,随着分区数的增加,相应的吞吐量会有所增加,一旦分区数超过某个阈值,整体的吞吐量是下降的。

# 参考

官方文档 (opens new window)

图解Kafka之实战指南 (opens new window)

#消息队列
上次更新: 2024/06/29, 15:13:44
消费者客户端开发
配置管理

← 消费者客户端开发 配置管理→

最近更新
01
基础概念
10-31
02
Pytorch
10-30
03
Numpy
10-30
更多文章>
Theme by Vdoing | Copyright © 2021-2024 旭日 | 蜀ICP备2021000788号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式