(1)kafka----高吞吐的分布式消息系统

kafka----高吞吐的分布式消息系统

离线与实时:

image

kafka是实时计算的数据源

1、kafka是什么
kafka是高吞吐的分布式消息系统
2、消息队列的应用场景

消息就是数据
队列就是排队

(1)系统之间解耦合
	queue模型
	publish-subscribe模型
(2)峰值压力缓冲
(3)异步通信(发微信属于异步通信,打电话属于同步通信)
3、kafka架构

(1)kafka框架、spark框架由Scala编写,其他的框架由Java编写

(2)kafka是去中心化架构:没有主节点,每个节点都是独立的

(3)kafka的本身自带高可用(如果是主从架构的话,需要对主节点进行高可用)

(4)zookeeper也是去中心化架构

producer:消息生存者(数据生产者)
consumer:消息消费者
broker:(1)是kafka集群的server,负责处理消息读、写请求、存储消息
	(2)是一个JVM进程,一个broker就是一个节点
topic:消息队列/消息分类,类似于数据库中的table(存放的是一类数据:学生表、分数表...)
zookeeper:kafka的元数据是存在zookeeper上面的,整个集群的管理也和zookeeper有很大的关系

image

4、kafka的消息存储和生产消费模型

消息存储就是数据存储

队列queue里面有生产者消费者模型

(1)一个topic分成多个partition,目的是实现分布式

(2)每个partition的内部消息是强有序的:先进先出,其中的每个消息都有一个编号叫offset--偏移量
   注意:每个分区的内部数据是强有序的,但是整个topic不是强有序的
   
(3)一个partition只对应一个broker,一个broker可以管多个partition
   注意:一个分区就是一个block块,底层就是一个文件
	
(4)kafka的消息不经过内存缓冲,直接将消息存到磁盘里的/直接写入文件(这一点和Hadoop一样)

(5)根据时间策略删除,而不是消费完就删除
   注意:kafka里的数据默认7天后自动删除,Hadoop中的数据是永久存储的
    
(6)producer自己决定往哪个partition写消息,可以是轮询的负载均衡,
   或者是基于hash的partition策略
   
注意:hash的partition策略:同样的数据会进入同一个分区。缺点:可能会出现热点和数据倾斜
5、kafka中的消费者组

consumer:消费者

(1)consumer自己维护消费到哪个offset(消费者自己决定读取分区的哪个消息,与kafka无关)
(2)每个consumer都有自己对应的消费组,消费组可以提高消费效率
(3)group内是队列消费模型
   注意:各个consumer消费不同的partition,因此一个消息在group内只消费一次
(4)group间是publish-subscribe消费模型
   注意:各个group各自独立消费,互不影响,因此一个消息在被每个group消费一次

image

6、kafka的特点
(1)kafka是消息系统,消息系统的特点:生存者消费者模型,支持FIFO模式--先进先出

(2)高性能:单节点支持上千个客户端,百兆每秒的吞吐

(3)持久性:消息直接持久化在普通磁盘上且性能好

(4)分布式:数据副本冗余、流量负载均衡、可扩展

(5)很灵活:消息长时间持久化,同时有Client维护消费状态
7、kafka与其他消息队列对比(了解)

image

8、消费状态的维护(了解)

image

9、kafka的数据写入磁盘,会不会出现瓶颈?
不会。
(1)kafka写磁盘是顺序的,所以不断的往前产生,不断的往后写
(2)kafka还用了sendFile的0拷贝技术,提高速度
(3)还用到了批量读写,一批批往里写,64K为单位,100K为单位,减少了网络传输的次数,RTT(RTT:Round-TripTime往返时间的开销就会微不足道,对文件的操作不会是很小的IO,也会是比较大块的IO

理解零拷贝

image
从上图中可以清楚的看到,Zero Copy的模式中,避免了数据在用户空间(代码)和内存空间(系统)之间的拷贝,从而提高了系统的整体性能。

posted @ 2022-03-22 20:57  阿伟宝座  阅读(192)  评论(0)    收藏  举报