Kafka吞吐量大的原因

概念及优劣势分析

在这里插入图片描述
与其他mq的区别:

  • kafka其实是个流处理平台,只是提供了发布订阅和topic支持的功能
  • 吞吐量高,单区有序,但整体不保证有序
  • 能够通过历史日志消费历史数据

kafka为什么吞吐量大

主要以下四个原因:
在这里插入图片描述

日志检索

在这里插入图片描述
每条消息的组成:
在这里插入图片描述
在这里插入图片描述一般情况磁盘读写比内存读写慢很多(随机读写方面)。但是kafka支持的顺序读写,可能比内存的读写效率还快。

在这里插入图片描述consumer会从磁盘中读取。

Kafka 日志存储: https://www.jianshu.com/p/aecb6d9d8c1c
kafka系列——日志篇: https://blog.csdn.net/linbiaorui/article/details/84574458

查看index文件:

bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files ~/app/tmp/kafka-log/topic_test-0/00000000000000000000.index

//输出结果:
offset: 0 position: 0

查看log文件:

bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files ~/app/tmp/kafka-log/topic_test-0/00000000000000000000.log  --print-data-log

//输出结果:
Starting offset: 0
baseOffset: 0 lastOffset: 3 count: 4 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 0 isTransactional: false isControl: false 
position: 0 CreateTime: 1600015276125 size: 137 magic: 2 compresscodec: NONE crc: 32980716 isvalid: true
| offset: 0 CreateTime: 1600015276124 keysize: 5 valuesize: 7 sequence: -1 headerKeys: [] key: key-1 payload: value-1
| offset: 1 CreateTime: 1600015276124 keysize: 5 valuesize: 7 sequence: -1 headerKeys: [] key: key-2 payload: value-2
| offset: 2 CreateTime: 1600015276125 keysize: 5 valuesize: 7 sequence: -1 headerKeys: [] key: key-5 payload: value-5
| offset: 3 CreateTime: 1600015276125 keysize: 5 valuesize: 7 sequence: -1 headerKeys: [] key: key-6 payload: value-6
baseOffset: 4 lastOffset: 7 count: 4 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 0 isTransactional: false isControl: false 
position: 137 CreateTime: 1600080591612 size: 137 magic: 2 compresscodec: NONE crc: 4029858374 isvalid: true
| offset: 4 CreateTime: 1600080591612 keysize: 5 valuesize: 7 sequence: -1 headerKeys: [] key: key-1 payload: value-1
| offset: 5 CreateTime: 1600080591612 keysize: 5 valuesize: 7 sequence: -1 headerKeys: [] key: key-2 payload: value-2
| offset: 6 CreateTime: 1600080591612 keysize: 5 valuesize: 7 sequence: -1 headerKeys: [] key: key-5 payload: value-5
| offset: 7 CreateTime: 1600080591612 keysize: 5 valuesize: 7 sequence: -1 headerKeys: [] key: key-6 payload: value-6

总结:找到index的offset,然后获得position,再去log文件中查找对应的position的相关数据。

sendfile零拷贝

在这里插入图片描述

在这里插入图片描述 总结:主要是应用和内核上下文的切换和拷贝次数方面的消耗大大降低。

分区

kafka中的topic中的内容可以被分为多分partition存在,每个partition又分为多个段segment,所以每次操作都是针对一小部分做操作,很轻便,并且增加并行操作的能力

批量发送

kafka允许进行批量发送消息,producter发送消息的时候,可以将消息缓存在本地,等到了固定条件发送到kafka

  • 等消息大小到达BATCH_SIZE_CONFIG
  • 一段时间发送一次

数据压缩

Kafka还支持对消息集合进行压缩,Producer可以通过GZIP或Snappy格式对消息集合进行压缩。
压缩的好处就是减少传输的数据量,减轻对网络传输的压力。

Producer压缩之后,在Consumer需进行解压,虽然增加了CPU的工作,但在对大数据处理上,瓶颈在网络上而不是CPU,所以这个成本很值得。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值