Kafka是什么?今天终于搞清楚了!

9,014 阅读4分钟

Kafka概述

在其官网Logo上有一句话“A distributed streaming platform”,即定位为一个分布式流式处理平台。Kafka起初是由LinkIn公司开发的一个多分区、多副本且基于Zookeeper协调的分布式消息系统,于2010年贡献给Apache基金会。它以高吞吐、可持久化、可水平扩展、支持流数据处理等多特性而被广泛使用,并且已经运行在数千家公司的生产环境。

Kafka拥有三个非常重要的角色特性:
1.消息系统。与传统的消息队列或者消息系统类似。
2.存储系统。可以把消息持久化到磁盘,有较好的容错性。
3.流式处理平台。可以在流式记录产生时就进行处理。

Kafka应用场景

为什么要使用Kafka,Kafka到底解决了什么问题?举个例子:
公司刚刚启动一个新项目,业务很简单,你三五下搞定。直接部署一个web服务和数据库,架构简单清晰,服务很快就上线了,老板很满意,你也很开心。架构如下图:


但好景不长,为了能对数据进行快速搜索,需要增加个搜索服务;为了能实时查看业务状态,需要把数据汇总到数仓以提供报表;为了数据安全审查,需要增加审核服务。每个子服务间可能又存在数据的交集。那么我们将看到下面的架构图:

至此,我们看到每一次增加新服务,都需要对Web应用做改动。一份数据,需要在不同业务服务中根据不同业务逻辑处理流转和存储,这是我们经常遇到的,但像上图中引发的服务间强依赖,高耦合等问题,对未来服务架构的扩展和维护将是极大的挑战。

这时我们引入Kafka,看它是怎样解决以上的难题的。Kafka提供的消息系统,让生产者将数据直接添加到队列中,而消费者从队列中依次读取然后处理。架构如下图:

Kafka优点

从上面的小例子,我们应该可以感受到Kafka的一些优点,接下来总结一下:
1.系统解耦。生产端的服务和消息端的服务在遵守同样的接口约束条件下,可以独立扩展和修改,而互不影响。
2.流量削峰。面对突发大流量,也即生产端生产速度比消费端的消费速度快的时候,消费端服务不会因为超负荷的请求而完全崩溃。
3.可扩展性。因为生产者与消费者已经隔离解耦,所以一旦想增加生产端或消费端的处理逻辑,或者服务实例等都变得十分容易。
4.高吞吐量。以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对 TB 级以上数据也能保证常数时间复杂度的访问性能。即使在非常廉价的商用机器上也能做到单机支持每秒 100K 条以上消息的传输。
5.数据冗余存储。Kafka支持多副本冗余存储机制,保障不正常宕机之后数据不丢失。
6.消息顺序性。Kafka分布式的单位是partition,Kafka保证同一个partition中的消息的有序性。一个topic多个partition时,则不能保证Topic级别的消息有序性。
7.回溯消费。指的是Kafka重新设置消息位移offset。kafka支持两种方式回溯。一种是基于消息偏移量回溯,一种是基于时间点的消息回溯。

Kafka体系架构

一个典型的Kafka体系结构包含什么呢?主要有以下几个大模块构成:


1.Broker:服务代理节点。可以简单理解为一个服务实例。多个Broker组成的就是一个Kafka集群。
2.Producer:生产者。就是生产、发送消息的一方。
3.Consumer:消费者。就是消费、接收在Kafka上的消息,进行做相应业务处理的一方。多个Consumer可组成一个Consumer Group,叫消费组。
4.Zookeeper:是Kafka用来负责集群元数据的管理、动态集群扩展、控制器的选举等操作引入的服务。(注:不过Kafka正在弱化zookeeper的作用)

总结

了解到这里,你是否对Kafka的大致架构有了清晰的认识呢?接下来,我会继续分享Kafka的知识,一起掌握Kafka理论,然后熟练地运用到实际工作当中~