大家好,我是尚影嫣,一名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主题的分区数。