kafka消息引擎

 

消息引擎四大设计特征:

一:kafka高吞吐量低延迟

kafka写入操作比较快,kafka把数据写入到操作系统页缓存中(页缓存是在内存中分配,操作系统自行决定何时把数据写回磁盘)典型的磁盘顺序访问型操作 (避免了磁盘随机写操作 ),轻松做到每秒写入几万甚至几十万消息

消费端做到高吞吐低延时: 首先从os的页缓存中读取,命中页缓存(不用穿透到底层的物理磁盘来获取消息)将数据直接发送到socker(零拷贝技术)linux的sendfile系统来实现零拷贝

实际上,kafka集群磁盘的读操作很少,大部分的消息都是直接命中页缓存

kafka实现高吞吐量和低延迟依靠以下几点:

1:大量使用页缓存 内存操作速度快且命中高

2:不直接参与物理I/O,交给最擅长此事的操作系统

3: 采用追加写入,避免缓慢的磁盘随机读/写操作

4:sendFile为代表的零拷贝加强网络间的数据传输效率

二:kafka消息持久化(高可用)

kafka服务通过持久化消息,解耦消息发送和消息消费

直接持久化数据到磁盘,留出内存给页缓存,提升整体性能

三:负载均衡(高吞吐)和故障转移(高可用)

负载均衡:智能化分区领导者选举(partition leader election)算法

故障转移:kafka集群以会话形式注册到zk,会话超时或者主备份无法维持心跳,集群自动启动备份服务器(选举出新的leader)

四:伸缩性

kafka集群中每台服务器的内部状态交给zk维护,扩展集群只需启动新的kafka服务器(kafka服务器只需保存轻量级状态)

 

基本概念:消息 

topic------------》partition(一个topic上多个partition)------------》replica(一个partition多个备份replica)

 

消息:消息头 +key+ value

key:消息键 对消息做partition作用,决定消息被保存在topic下的哪个partition

在JMM中对象保存开销相当大,小对象通常需要两倍空间保存数据,并且堆数据量增大 GC性能下降 拖慢系统吞吐量 ; 运行java的操作系统通常默认开启页缓存 数据存两份,资源两份 故kafka使用紧凑二进制字节数组ByteBuffer(key value)

topic:逻辑概念 代表一类消息 用于区分业务 社区团购,买家秀

partiton :topic下有很多分区 默认从partiton 0开始,每个分区上有很多offset 从0开始并递增,每个offset对应一个消息(每条消息在partition上的位移是固定的,但消费者的消费offset随着消费进度前移)

消息三元组:topic partition offset 通过三元组能在kafka集群中找到唯一对应的消息

replica:副本 备份partition有序消息日志

副本分类:leader副本 、 follower副本

kafka保证同一个partition的多个replica一定不会分配在一个broker上 否则无法实现备份的效果

 

kafka应用场景:

消息传输

网站行为日志追踪(支持用户超大的点击流量 超强的吞吐量)

审计数据收集(可持久化)

日志收集(低延时,全量收集,HDFS)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值