【问题标题】:How are TOPICS managed in Apache KafkaApache Kafka 中如何管理 TOPICS
【发布时间】:2016-06-05 05:26:04
【问题描述】:

Apache Kafka 中的每个主题是一个独立的队列,还是有一个包含所有主题的队列,或者大量主题分布在较少数量的队列上?

换句话说,is 1 Topic = 1 Queue?

或者说,Kafka 内部是如何维护每个主题的?

【问题讨论】:

    标签: apache-kafka publish-subscribe


    【解决方案1】:

    在 Kafka 中,每个主题都是一个单一且逻辑的分布式提交日志(即仅附加文件)。

    每个主题都被分成多个分区,分布在您的集群中。分区数量可以动态增加。

    分区物理存储在文件系统上。一个分区必须完全适合一个代理(Kafka 集群中的一台机器)。

    此外,您可以在一个代理上拥有同一主题的多个分区。

    然后将分区自己拆分为多个段文件(默认一个段的大小为 1GB)

    为了说明这一点,您可以创建一个主题如下:

    创建一个新主题“测试”

         $ > ./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
    

    【讨论】:

      【解决方案2】:

      主题有分区。每个分区都是一个队列。每个分区中的项目按顺序处理。您发布到主题并根据分区逻辑,将消息发布到分区。默认情况下使用循环分发,但可配置。

      【讨论】:

      • 我认为这是主题日志的配置方式,而不是主题本身。请您再验证一次。 @superaghu
      • @divyesh - 主题日志是什么意思,Kafka 没有这样的概念。我提供的信息是关于主题的
      猜你喜欢
      • 1970-01-01
      • 2019-08-16
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 2016-10-09
      • 1970-01-01
      相关资源
      最近更新 更多