1、定义
kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要用于大数据实时处理领域
2、消息队列
1)传统消息队列的应用场景
2)使用消息队列的好处
①、解耦
②、可恢复性
系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所 以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
③、缓冲
有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致 的情况
④、增加峰值处理能力(削峰)
在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。 如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列 能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。
3)消息队列的两种方式
①、点对点模式
一对一,消费者主动拉取数据,消息收到后清除消息
消息生产者生产消息发送到Queue中,然后消息消费者从Queue中取出并且消费消息。 消息被消费以后,queue 中不再有存储,所以消息消费者不可能消费到已经被消费的消息。 Queue 支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。
②、发布订阅模式
一对多,消费者消费数据之后,不会清除消息
消息生产者(发布)将消息发布到 topic 中,同时有多个消息消费者(订阅)消费该消 息。和点对点方式不同,发布到 topic 的消息会被所有订阅者消费
发布订阅模式分为两种
一种是消费者主动拉取数据
一种是队列侧主动推送数据
kafka是消费者这边主动的去拉取数据
缺点:消费者维持一个常轮询,去查看kafka中是否有新消息,比较浪费资源
3、kafka的架构
1)Producer:消息生产者,向kafka broker发送消息的客户端
2)Consumer:消息消费者,向kafka取消息的客户端
3)Consumer Group:消费者组,提高消费的并发,消费者最好的数量等于topic分区的数量
4)Broker :一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。
5)Topic :可以理解为一个队列,生产者和消费者面向的都是一个 topic
6)Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上, 一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列;
目的是为了提高kafka集群的负载能力和并发,可以向多个分区写入消息
7)Replica:副本,为保证集群中的某个节点发生故障时,该节点上的 partition 数据不丢失,kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本, 一个 leader 和若干个 follower。
8)leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 leader
9)follower:每个分区多个副本中的“从”,实时从 leader 中同步数据,保持和 leader 数据 的同步。leader 发生故障时,某个 follower 会成为新的 follower。
10)Zookeeper:
①、所有的kafka broker会注册到Zookeeper,组成集群
②、记录kafka中消息的offset (0.9版本之前offset存在zk , 0.9版本之后存在本地)