关于java:kafka的主题和分区

30次阅读

共计 1027 个字符,预计需要花费 3 分钟才能阅读完成。

大家好,我是尚影嫣🌷,一名 Java 后端程序媛。如果您喜爱我的文章,欢送点赞➕关注❤️,让咱们一起成为更好的咱们~

一、主题 Topic

主题 Topic 能够了解成是⼀个类别的名称。Kafka 中的音讯以主题为单位进行归类,生产者负责将音讯发送到特定的主题,而消费者负责订阅主题并进行生产。发送到 Kafka 集群中的每一条音讯都要指定一个主题。

二、partition 分区

partition(分区)是 kafka 的一个外围概念,kafka 将 1 个 topic 分成了一个或多个分区,每个分区在物理上对应一个目录,分区目录下存储的是该分区的日志段 (segment),包含日志的数据文件和两个索引文件。而后每个分区又对应一个或多个正本,由一个 ISR 列表来保护。留神: 分区数能够大于节点数,然而正本数不能大于节点数,因为正本须要分不到不同的节点上,能力达到备份的目标。

⼀个主题中的音讯量是十分大的,因而能够通过分区的设置,来分布式存储这些音讯。比方⼀个 topic 创立了 3 个分区。那么 topic 中的音讯就会别离寄存在这三个分区中。
为⼀个主题创立多个分区:

./kafka-topics.sh –create –zookeeper localhost:2181 –partitions 2 –topic test1

查看 topic 的分区信息:

./kafka-topics.sh –describe –zookeeper localhost:2181 –topic test1

分区的作用:

  • 能够分布式存储;
  • 能够并行写;

实际上是存在 data/kafka-logs/test-0 和 test- 1 中的 0000000.log 文件件中。

定期将生产分区的 offset 提交给 kafka 外部 topic:__consumer_offsets,提交过来的
时候,key 是 consumerGroupId+topic+ 分区号,value 就是以后 offset 的值,kafka 会定
期清理 topic 里的音讯,最初就保留最新的那条数据。
因为__consumer_offsets 可能会接管高并发的申请,kafka 默认给其调配 50 个分区(可通过 offsets.topic.num.partitions 设置),这样能够通过加机器的形式抗大并发。

通过如下公式能够选出 consumer 生产的 offset 要提交到__consumer_offsets 的哪个分区:

hash(consumerGroupId) % __consumer_offsets 主题的分区数。

正文完
 0