消息队列kafka

一、kafka介绍

        Kafka是一种高吞吐量、分布式、基于发布/订阅的消息系统。

二、kafka组件

        broker: Kafka服务器,负责消息存储和转发

        topic:消息类别,Kafka按照 topic来分类消息

        partition:topic的分区,一个 topic可以包含多个 partition,topic消息保存在partition上

        offset:消息在日志中的位置,可以理解是消息在 partition上的偏移量

        Consumer Group:消费者分组,每个 Consumer必须属于一个 group

        Zookeeper:保存着集群 broker、topic、partition等 meta数据;另外,还负责 broker故

障发现,partition leader选举,负载均衡等功能

三、kafka数据存储设计

1.partition(逻辑)

        每条消息包含offset,MessageSize,data属性。

        offset表示 Message在这个 partition中的偏移量。逻辑值。

        MessageSize表示消息内容 data的大小;

        data为 Message的具体内容。

2.segment(物理)

        partition物理上由多个 segment文件组成,每个 segment大小相等,顺序读写。

        在查找指定 offset的 Message的时候,用二分查找(比较segment首尾便宜地址)就可以定位到该 Message在哪个 segment数据文件中。

3.数据文件索引

       segment由index和data文件组成,index文件中并没有为数据文件中的每条 Message建立索引,而是采用了稀疏存储的方式,每隔一定字节的数据建立一条索引(类似块索引)。可以避免避免了索引文件占用过多的空间。

4.kafka如何保证高可用

        1.副本机制

        2.isr机制

                Kafka使用ISR(In-Sync Replicas)机制来保证数据的一致性和可用性。

        3.自动故障转移

5.kafka高水位和低水位

        高水位(High Watermark):高水位是指分区中已经被复制的消息的最高位置

        低水位(Low Watermark):低水位是指消费者已经消费的消息的位置

        最新位移(latest offset):  最新位移是指分区中最新消息的偏移量,即下一条消息将要写入的位置。

四、生产者设计

1.负载均衡

        为了有效利用 broker集群的性能,提高消息的吞吐量,producer可以通过随机或者 hash等方式,将消息平均发送到多个 partition上,以实现负载均衡。

2.批量发送

        Producer端可以在内存中合并多条消息后,以一次请求的方式发送了批量的消息给 broker,从而大大减少 broker存储消息的 IO操作次数。

3.压缩(GZIP或 Snappy)

        Producer端可以通过 GZIP或 Snappy格式对消息集合进行压缩。Producer端进行压缩之后,在Consumer端需进行解压。

五、消费者设计

1.消费者组

        同一 Consumer Group中的多个 Consumer实例,不同时消费同一个 partition,等效于队列模式。partition内消息是有序的,Consumer通过 pull方式消费消息。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值