• 张洋
    2023-07-20 来自北京
    关于存储模块有一个问题,Kafka为什么每个分区一个文件(逻辑上的会分段),rocketMQ为什么一个Broker所有的queue都在一个commitlog中? 自己想的是Kafka的方式如果分区太多会创建大量的资源,如果FD资源耗尽就会出现问题,所以Rocketmq会支持的分区更多。 还有其他原因吗?

    作者回复: 你好呀,这个问题的答案在基础篇的《05 | 存储:消息数据和元数据的存储是如何设计的?》中可以找到。 核心考虑点事对读和写的性能要求。 第一种方案,单个文件读和写都是顺序的,性能最高。但是当文件很多且都有读写的场景下,硬盘层面就会退化为随机读写,性能会严重下降。 第二种方案,因为只有一个文件,不存在文件过多的情况,写入层面一直都会是顺序的,性能一直很高。但是在消费的时候,因为多个分区数据存储在同一个文件中,同一个分区的数据在底层存储上是不连续的,硬盘层面会出现随机读的情况,导致读取的性能降低。

    
    2
  • fc1997
    2023-07-21 来自浙江
    想问下,如果kafka一个topic有五个partition然后有三台broker,这种情况下会存在一台broker有三个partition的情况嘛,因为没用过kafka

    作者回复: 你好,是有可能的。 默认情况下,5个partition会均匀分布在3台Broker上。 此时分区在Broker上的数量分布可能是:2、2、1。 但是分区在Broker上分布的算法实现是比较复杂的,考虑的情况更多。所以从理论上看,是有可能会出现一个Broker上放了3个分区的。此时分区数量分布就是:3,1,1。

    共 2 条评论
    
  • jackfan
    2023-07-20 来自上海
    有一个疑问 就是客户端寻址,寻的是哪个的地址?是broker的还是topic、分区这些的

    作者回复: 你好~ 寻找的是分区Leader所在的 Broker 地址。因为在直连模式下,需要先知道分区的Leader是哪台,才能把数据写入到分区的Leader中。

    
    
  • 林龍
    2023-07-19
    看完前面的篇章,我以为kafka是poll的,认为poll = pull + ack ;能够更加详细讲一下poll这个模式吗?
    
    1
  • Arvin
    2023-08-10 来自北京
    消费端的消费分组是出于高可用目的设计么?客户端寻址是怎样动态保持与生产端元数据的一致的呢?
    
    