• Jafka来源分析——文章


    Kafka它是一个分布式消息中间件,我们可以大致分为三个部分:ProducerBrokerConsumer。当中,Producer负责产生消息并负责将消息发送给KafkaBroker能够简单的理解为Kafka集群中的每一台机器,其负责完毕消息队列的主要功能(接收消息、消息的持久化存储、为Consumer提供消息、消息清理.....)ConsumerBroker获取消息并进行兴许的操作。每一个broker会有一个ID标识,该标识由人工在配置文件里配置。

    Kafka中的消息隶属于topictopic能够简单的理解为分组。在topic内部,消息会划分为分区(partition)

    对于partition可能难以理解。至少我读程序的时候一直没有弄明确partition的编号到底是怎么确定的,这里多说一下。

    broker的配置文件server.properties中有配置项num.partitionstopic.partition.count.map num.partitions是该broker每个topic默认的partition数目(设为N)topic.partition.count.map针对每个topic设置partition数目(设为N)Broker依据设置的数目在该机器为topic创建[0,1...N-1]Npartition

    所以,partition的命名能够理解为由两部分组成,brokerIdpartitionNum。当中partitionNum是从0開始的数字。

    Broker依照以下的原则组织该机器的消息队列。

    首先,为每个topic的每个partition创建一个文件夹,命名格式为topic-partition

    Broker对于topic-partition的消息进行分段(segment)存储。每个segment的命名格式每个segment的偏移量(offet)。文件夹的组织结构详细例如以下图所看到的:

    Kafka每一条Message的格式:

    Length(4byte)

    MagicValue(1byte)

    Attribute(1byte)

    CRC校验码(4byte)

    payload(消息的内容)


    当中magicvalue=1,Attribute表明消息是否採用压缩以及採用何种压缩方式,crcpayloadcrc校验码。

    消息在kafka的持久化存储文件里新增了一个域:消息的长度,详细的格式例如以下所看到的:


    当中,ByteBufferMessageSetFileMessageSet都是採用上面的格式进行存储的。

    注意Kafka对消息进行压缩的过程。Kafka对消息进行压缩时是对一组Message进行压缩的,其处理步骤例如以下。

    首先将每一条Message序列化到一个byte数组,然后将压缩后的byte数组再组成一条新的Message,其详细格式例如以下:



    注意FileMessageSet中的offset是指该messagesetFile起始位置,这是文件的详细位置。


  • 相关阅读:
    漫谈企业级SaaS的多租户设计
    网易实战分享|云信IM SDK接口设计实践
    WebRTC系列之音频的那些事
    如何科学地完成一场 AR 发布会?全在这份超细节活动策划 Xmind 里了
    移动社交如何玩?网易云信携手崽崽和Uki打造更多新场景!
    行业观察|智慧屏集中爆发,大屏市场能否迎来破局者?
    Docker文件系统实战
    文字检测模型EAST应用详解 ckpt pb的tf加载,opencv加载
    opencv dnn加载EAST的pb模型的一点问题
    百度开源:PaddleOCR与PaddlePaddle / paddle2onnx 实践一
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/5032193.html
Copyright © 2020-2023  润新知