1、Kafka特点与定位
1.1、Kafka简介
- kafka的设计定位是“分布式事件流平台”,适用于所有产生事件或者基于事件触发运转的业务场景,而消息的发布订阅可以理解为事件流的一种场景,所以kafka在设计上更多的定位于底层能力、吞吐量、稳定性的保证
- kafka是一个分布式流式处理平台,它以高吞吐、可持久化、可水平拓展、支持流数据处理等多种特性而被广泛使用,这与它所扮演的三个角色密不可分:
消息系统。Kafka 和传统的消息系统都具备消息解耦、冗余存储、流量削峰、缓冲、异步通信、拓展性、可恢复性等功能,与此同时,kafka还提供了回溯消费等拓展功能。
存储系统。kafka把消息持久化到磁盘,相比于内存存储的系统,能更有效地防止消息丢失。而且基于kafka的多副本和磁盘持久化机制,kafka具备较强的容错性。
流式处理平台。kafka不仅可以作为有效的消息和存储系统,还提供了完整的流式处理类库,如窗口、连接、变换、聚合等操作,且已经与多个平台(如spark)整合。
1.2、典型应用场景
- 异步通信
- 将业务中属于非核心或不重要的流程部分,使用消息异步通知的方式发给目标系统,这样主业务流程无需同步等待其他系统的处理结果,从而达到系统快速响应的目的。如事件中心。
- 错峰流控与流量削峰
- 在大型系统中,上下游系统处理能力存在差异,处理能力高的上游系统突发流量可能会对处理能力低的某些下游系统造成冲击,需要提高系统的可用性的同时降低系统实现的复杂性。消息队列提供亿级消息堆积能力,当流量洪峰突然来袭时,可以通过队列服务堆积信息,在下游系统有能力处理消息的时候再处理,避免下游订阅系统因突发流量崩溃。
- 日志同步。Kafka设计初衷就是为了应对大量日志传输场景
- 日志大数据,日志计算及检索支持(全文检索与全链路追踪)
- binlog同步
- 事件回溯
- 事件流处理
1.3、几种MQ横向对比
2、Kafka整体架构
一个典型的 kafka 集群如上图所示,包括zookeeper、broker、producer和consumer
- zookeeper,负责管理集群的元数据;
- broker,负责接收producer发出的消息并保存,并提供给consumer 消费;
- producer,消息生产者,发送消息到 broker;
- consumer,消息消费者,从 broker 拿消息进行消费。
2.1、broker & zookeeper
broker 是 kafka 集群中的枢纽,消息的流转和保存等操作就是在这里发生的,也是前述分布式和横向拓展的基础。broker 可以理解为一个物理概念,大多数情况下可以将每一台 kafka 服务器都可以看成是一个 broker,无论是 producer还是consumer,消息的最终交互就是在 broker 上进行的,且每一个 broker 都有自己唯一的 id,通过这个 id 来相互区分。不同的 broker 之间组成一个分布式集群,zookeeper负责维护集群的元数据信息。
2.2、 topic & partition & replica
对于消息系统来说,真正与生产者和消费者打交道的是消息队列,而无关具体的broker,为此 kafka 引入了 topic/partition/replica 这三个概念。
topic(主题)
- 可以理解为消息队列的名称,是一个逻辑概念。producer和consumer直接的交互对象就是topic,producer往 topic 中发送消息,consumer 从 topic 中消费消息。
partition&#