1、kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理。----还有哪些模式的消息队列?--点对点模式
2、kafka也是处于消息传输中间流程组件。主要用于处理两个系统之间的消息传递。
3、消息队列。为什么要引入消息队列?
同步处理:即发出消息,用户就持续等待,一直等到结果返回成功才结束。即同步要求两个系统之间必须同时在线。
异步处理:即发出请求之后,先响应用户,但是将请求的数据写入到消息队列中,后续在进行处理。
消息队列异步处理的优势:系统解耦合,削峰(可以缓解服务器负担,当出现发送快,处理慢的情况,可以进行缓冲,故叫削峰),灵活性(当集群出现故障时,可以快速地切换集群,不影响业务)
4、消息队列的两种模式
(1)点对点模式(一对一)。
如果点对点的模式想要被多个消费者消费到,则需要配置多个队列。类似于flume,如果想要将信息传输给多个sink,则需要配置多个管道。
点对点是主动获取的消息。
(2)发布/订阅模式(一对多,消费者消费数据之后不会清除消息)。
存储在这种模式下的数据不是永久保留的,不同于HDFS文件系统,这种消息只会存在一定的时间,这个时间是可以自己配置的。
发布/订阅的模式有两种模式:
第一种是有队列主动推的模式,即消息队列不管消费者的状态和处理能力,只管按照自己的速度去推送。缺点:各个消费者的处理能力不一样,低处理能力的消费者会产生阻塞,高处理能力的消费者又会空转。
第二种是由消费者按照自己的处理能力去主动拉取消息。缺点:每个消费者在消费之前都要先“询问”接口是否有数据,有数据才去消费数据,当消息队列没有数据时,同样容易造成资源浪费。
kafka是基于订阅/发布模式的消费者主动获取模式。
5、kafka基本架构
(1)多个服务器连接,就组成了集群
(2)Topic本质就是分类,一般Topic还需要进行分区,分区的作用是为负载均衡、提高并发能力。
(3)分区在不同服务器的topic会分Leader和Follower,主要是进行数据备份。当一台服务器宕机之后,就可以立马启用Follower作为Laeder,确保数据不中断。
(4)生产者和消费者,只能连接Leader,只有当Leader挂掉之后才能练Follower,Follower只作为备份。
(5)是不是必须有flower呢?不一定,看实际配置情况;反过来,一个主题也可以有多个副本。只要空间足够,互不影响。
(6)消费组。将多个消费者组合在一起,就组成了消费者组。同一个的分区只能被同一个消费者组里面的一个消费者消费!。
(7)消费者组的优势:提高消费能力。
(8)Zookeeper,协助管理kafka集群。kafka集群和消费者都会将一部分信息存储到zk。假如消费过程宕机,消费者重连,就需要通过zk保存断点信息,比如说消费到第几条数据等等,当下次能断点续联。(0.9之前可以存储在zk中,0.9之后会直接存储到kafka本地,即一个系统topic)。
(9)ZK是一个各大框架的润滑剂,访问量过大会影响其性能。
(10)kafka消息存在磁盘,默认保存七天,即168个小时。