Apache Kafka 中如何管理 TOPICS
How are TOPICS managed in Apache Kafka
Apache Kafka 中的每个主题是一个独立的队列,还是只有一个队列包含所有主题,或者大量主题分布在较少数量的队列中?
换句话说,is 1 Topic = 1 Queue
?
或者说,Kafka内部是如何维护每个topic的?
主题有分区。每个分区都是一个队列。每个分区中的项目按顺序处理。您发布到主题并根据分区逻辑,将消息发布到分区。默认使用循环分配,但可配置。
在 Kafka 中,每个主题都是一个单一的逻辑分布式提交日志(即一个仅附加文件)。
每个主题都分为多个分区,分布在您的集群中。分区数量可以动态增加。
分区物理存储在文件系统上。一个分区必须完全适合一个代理(Kafka 集群中的一台机器)。
此外,您可以在一个代理上拥有同一主题的多个分区。
然后分区本身被分割成多个段文件(默认一个段的大小为1GB)
为了说明这一点,您可以创建一个主题如下:
创建新主题'test'
$ > ./kafka-topics --create --topic test --replication-factor 1 --partitions 3 --zookeeper localhost:2181
Created topic "test".
列出kafka分区(每个分区一个文件夹)
$ > ls /tmp/kafka-logs | grep test
test-0
test-1
test-2
列出每个分区的段文件
$ > ls -sh /tmp/kafka-logs/test*
/tmp/kafka-logs/test-0:
total 0
0 00000000000000000000.index 0 00000000000000000000.log
/tmp/kafka-logs/test-1:
total 4,0K
0 00000000000000000000.index 4,0K 00000000000000000000.log
/tmp/kafka-logs/test-2:
total 4,0K
0 00000000000000000000.index 4,0K 00000000000000000000.log
Apache Kafka 中的每个主题是一个独立的队列,还是只有一个队列包含所有主题,或者大量主题分布在较少数量的队列中?
换句话说,is 1 Topic = 1 Queue
?
或者说,Kafka内部是如何维护每个topic的?
主题有分区。每个分区都是一个队列。每个分区中的项目按顺序处理。您发布到主题并根据分区逻辑,将消息发布到分区。默认使用循环分配,但可配置。
在 Kafka 中,每个主题都是一个单一的逻辑分布式提交日志(即一个仅附加文件)。
每个主题都分为多个分区,分布在您的集群中。分区数量可以动态增加。
分区物理存储在文件系统上。一个分区必须完全适合一个代理(Kafka 集群中的一台机器)。
此外,您可以在一个代理上拥有同一主题的多个分区。
然后分区本身被分割成多个段文件(默认一个段的大小为1GB)
为了说明这一点,您可以创建一个主题如下:
创建新主题'test'
$ > ./kafka-topics --create --topic test --replication-factor 1 --partitions 3 --zookeeper localhost:2181
Created topic "test".
列出kafka分区(每个分区一个文件夹)
$ > ls /tmp/kafka-logs | grep test
test-0
test-1
test-2
列出每个分区的段文件
$ > ls -sh /tmp/kafka-logs/test*
/tmp/kafka-logs/test-0:
total 0
0 00000000000000000000.index 0 00000000000000000000.log
/tmp/kafka-logs/test-1:
total 4,0K
0 00000000000000000000.index 4,0K 00000000000000000000.log
/tmp/kafka-logs/test-2:
total 4,0K
0 00000000000000000000.index 4,0K 00000000000000000000.log