(1)kafka----高吞吐的分布式消息系统
kafka----高吞吐的分布式消息系统
目录
离线与实时:
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有很大的关系

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消费一次

6、kafka的特点
(1)kafka是消息系统,消息系统的特点:生存者消费者模型,支持FIFO模式--先进先出
(2)高性能:单节点支持上千个客户端,百兆每秒的吞吐
(3)持久性:消息直接持久化在普通磁盘上且性能好
(4)分布式:数据副本冗余、流量负载均衡、可扩展
(5)很灵活:消息长时间持久化,同时有Client维护消费状态
7、kafka与其他消息队列对比(了解)

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

9、kafka的数据写入磁盘,会不会出现瓶颈?
不会。
(1)kafka写磁盘是顺序的,所以不断的往前产生,不断的往后写
(2)kafka还用了sendFile的0拷贝技术,提高速度
(3)还用到了批量读写,一批批往里写,64K为单位,100K为单位,减少了网络传输的次数,RTT(RTT:Round-TripTime往返时间的开销就会微不足道,对文件的操作不会是很小的IO,也会是比较大块的IO
理解零拷贝
从上图中可以清楚的看到,Zero Copy的模式中,避免了数据在用户空间(代码)和内存空间(系统)之间的拷贝,从而提高了系统的整体性能。



浙公网安备 33010602011771号