kafka 总结

 

kafka 是一个高吞吐量,分布式,分布订阅系统

kafka 的作用: 系统解耦,异步通信,削峰填谷

kafka 集群以topic 作为分类

每个topic 下面会有一组分区,

每个分区下面会有多个broker,1个broker 是leader,多个follower,leader 负责数据的读写,follwer负责同步分区中的数据,

分区数是3,每个topic下面有三个分区

分区副本因子是3 每个分区有三个副本,在不同的机器上,会有一个是leader,其他是follower

leader宕机,其他的follower会选举出新的leader,负责该分区数据的读写,leader和topic的部分的数据在zookeeper中。

 

 

消息队列的两种模式:

1.至多一次:消费生产者将数据写入消息队列,然后由消费者负责拉取消息服务器中的消息,一旦消息被确认消费之后,由消息服务器主动删除队列中的消息,这种消费方式一般只允许被一个消费者消费,并且消息队列中的数据不允许被重复消费。

2.没有限制: 生产者发完数据以后,该消息可以被多个消费者消费,并且同一个消费者可以多次消费服务器中的同一个记录,消息服务器一般可以长时间存储海量信息。

kafka 中的关键的概念:

分区数:3

分区副本因子:3

主题:topic01

消费组:

LEO:

水位线

kafka 会把topic中Record消息持久化到磁盘,持久化的时间通过配置文件制定

log.retention.hours=168

kafka底层会定期检查日志文件,然后将过期的数据从log中移除。

 

kafka 日志分区的原因

1.方便扩容。 如果数据太大,直接增加分区就可以了。

2.方便负载均衡。 在不同的机器上,存储的消息数据比较均匀

分区的策略:

1.轮训

2.hash

3.自定义分区

消费组

1.在同一个消费者组中的消费者实例,均匀消费这个组中的所有的数据

2.在不同组中的消费者,每条记录会广播的消费组中。

在同一个消费组中的消费者实例

1.如果新成员的介入,新成员会接管消费组中的其他成员的分区

2.如果有其他消费者实例挂掉,则有消费者组中的其他成员接管宕机的消费者的实例

kafka 同一个topic下,相同分区是有序的,不同分区是无序的。

如果要保证全局有序,可以通过只有一个分区topic 实现

kafka的消息是保存在磁盘上的

硬盘是机械结构,每次写入都会寻址--->写入。寻址是一个机械操作,它是最耗时的,硬盘最讨厌随机io,最喜欢数据io。为了提高读写硬盘的速度,kafka使用顺序io,这样节省了大量的内存开销,以及io寻址时间

 

现代分页存储利用内存,提高IO效率。利用操作系统的page 实现文件到物理内存内存的映射,完成

MMP的映射后,用户对内存的操作,会自动刷新到磁盘,极大的降低了io使用率。

 

kafka 高吞吐率的原因

1.利用多分区

2.顺序写入

3.MMFile(Memory mapped filed)

4. Zero copy

DMA是一种协处理器,是CPU 的一个代理,它负责一部分copy工作,从而减轻了cpu的负担。DMA的有点:中断少,cpu负担低。

 

 

普通copy和zerocopy的区别:

一般copy

1.文件在磁盘中的数据被copy内核缓存区

2.文件从内核缓存区copy到用户缓存区

3.文件从用户缓存区copy到内核与socket 相关的缓存区中

4.数据从socket 缓存区copy到相关协议引擎发送出去

zerocopy

1.文件直接从磁盘copy到内核缓存区

2.文件从内核缓存区copy到内核与socket相关的缓存区

3.文件从内核与socket相关的缓存区copy到相关协议引擎发送出去

 

kafak 高水位数据的丢失

0.11版本++ 以后 幂等性和事务性是kafka的核心性能

参数:

1.https://www.cnblogs.com/cjsblog/p/9664536.html

2.https://blog.csdn.net/u014236541/article/details/78439045

3.https://blog.csdn.net/weixin_30235225/article/details/102054125-----DMA

4.https://www.zhihu.com/question/56172498?sort=created

5.https://blog.csdn.net/lizhitao/article/details/39499283

你可能感兴趣的:(消息队列)