Kafka架构与核心原理

kafka集群架构

 1、Topic的分区和副本机制

        分区的作用

        1-解决了单台节点容量有限的问题: 每一台服务器上的硬盘资源始终是有上限的。一个Topic分成多个分区后,可以使用多个服务器节点的存储资源,提供更多的数据存放能力。

        2-增加Topic对数据的吞吐量:通过分区操作,将一个Topic分成了多个分区,多个分区分布在不同的节点上面,从而提供更加高效的数据读写请求。

分区的数量是没有限制的,与集群中的Broker节点也没有关系。但是实际工作中,推荐分区数量不要超过集群总结点个数的3倍。

        副本的作用

        提高数据的可靠性:副本数越多,数据越安全,容错性高,但是读写效率会变低。

副本的数量是有限制的,最多和集群中Broker的节点个数一致,但是实际工作中,根据数据的重要程度,推荐副本的数量为1-3之间。

2、消息存储和查询机制

消息存储

        1-kafka中数据的存放位置:在server.properties中配置的log.dirs=/export/server/kafka/data

        2-data目录下,文件夹的命名规则如下:Topic名称-分区编号

        3-segment中文件名称命名规则如下:文件名称中的数字,表示该文件中第一条数它的offset(偏移量)。

        问题:消息数据是不断的往一个log文件写呢,还是会分成多个文件夹来存储?

        答:会分成多个文件存储,当log文件的大小达到1GB的时候,就会滚动形成新的文件,同时配套的index文件也会跟着滚动生成。

        问题:为什么要分成不同的文件存储?

        答:

               1.一个文件过大,打开和关闭文件需要消耗大量的系统资源。

               2.一个文件过大,在里面查找具体数据的时候,非常耗时。

               3.kafka只是对数据做临时的存储,而不是永久存储,所以kafka会定时的将过期数据删除掉,当消息超过一定时间后,kafka会认为数据失效,就会被kafka删除。数据默认的保留时间是168小时(7天),可以在server.propereties中通过log.retention.hours=168配置参数指定。

index文件内容的基本结构:


         

查询机制

        查询步骤:

        1-首先先确定要读取的这个offset(偏移量)在哪个segment片段中。

        2-查询这个segment片段的index文件,根据offset确定这个消息在log文件的什么位置,也就是确定消息的物理偏移量。

        3-读取log文件,查询对应范围内的数据即可(底层是基于磁盘顺序查询)。

        4-获取最终的消息数据。

3、Kafka中生产者数据分发策略

        1-随机分发策略:在python的客户端支持,但是在Java中不支持。

        2-指定分区策略:发送数据的时候,直接明确指定要将数据发到哪个分区。支持

        3-Hash取模策略:对数据按照Key进行Hash取模,然后分发。支持

        4-轮询策略:在2.4及以上版本,已经更改位粘性分发策略。只在Java中支持

        5-自定义分区策略:支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值