1 Kafka简介
Kafka是分布式发布订阅消息系统。他最初由Linkedin公司开发,之后成为Apache项目的一部分。Kafka是一个分布式的可划分的冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。
在大数据系统中,常常会碰到一个问题,整个大数据是由各个子系统组成,数据需要在各个子系统中高性能,低延迟地不停流转。传统的企业消息系统并不是非常适合大规模的数据处理。为了已在同时搞定在线应用(消息)和离线应用(数据文件和日志),Kafka就出现了。Kafka可以起到两个作用:
① 降低系统组网复杂度;
② 降低编程复杂度,各个子系统不在是相互协商接口,各个子系统类似插口在插座上,
Kafka承担高速数据总线的作用。
Kafka主要的特点:
① 消息系统的特点:生产者消费者模型,FIFO。
分析:消息系统基本的特点是保证了有基本的生产者消费者模型,partition内部是FIFO的,partition之间不是FIFO的,当然我们可以把topic设为一个partition,这样就是严格的FIFO。
② 高性能:单节点支持上千个客户端,百MB/S吞吐。
分析:接近网卡。
③ 持久性:将消息持久化到普通磁盘,因此可用于批量消费,例如ETL,以及实时应用程序。通过将数据持久化到硬盘以及replication(备份)防止数据丢失。
分析:直接append到磁盘里面去,这样做的好处:第一个是直接持久化,数据不会丢;第二个是顺序写,然后消费数据也是顺序地读,所以持久化的同时保证顺序,因为磁盘顺序读比较快。
④ 分布式:数据副本冗余、流量负载均衡和可扩展。
分析:分布式,数据冗余就是同一份数据可以分到不同的broker上面去,也就是当一份数据的磁盘坏掉的时候,数据不会丢失,比如3个副本,就是在3个机器磁盘都坏掉的情况下数据才会丢。当然分配副本的时候是按照负载均衡来的。可扩展可以理解为在线扩展,不需要停掉服务。
⑤ 很灵活:消息被处理的状态是在consumer端维护,而不是由server端维护。当失败时能自动平衡。
分析:消费方式非常灵活,第一是消息持久化时间跨度比较长,一天或者一星期等;第二是consumer自己维护消费状态、Queue模型、发布订阅(广播)的模型和回滚的模型。
⑥ 支持online和offline。
2 Kafka工作原理
2.1 Kafka架构
Kafka的整体架构非常简单,是显示分布式架构,producer、broker和consumer都可以是多个。producer和consumer实现Kafka注册的接口,数据从producer发送到broker,broker承担一个中间缓存和分发的作用。broker分发注册到系统中的consumer。客户端和服务器端的通信,是基于简单、高性能且与编程无关的TCP协议。几个概念如下:
(1)Broker:消息中间件处理结点,一个Kafka结点就是一个broker,多个broker可以
组成一个Kafka集群。
(2)Topic:一类消息,例如page view日志、click日志等都可以以topic的形式存在,Kafka集群能够同时负责多个topic的分发。
(3)Partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个强有序的队列。一个partition只对应一个br