Kafka介绍

来源:互联网 发布:能查汽档案的软件 编辑:程序博客网 时间:2024/05/15 10:14

Kafka是一个分布式流平台,意味着它具有如下性质:

1. 它可以发布和订阅流数据,和消息队列或者企业消息系统类似;

2. 它可以保存流数据;

3. 它可以实时处理流数据。

Kafka适合如下两类应用:

1. 构建实时数据流管道,在系统或应用之间取得可靠数据;

2. 构建实时流应用,传输或响应流数据。


为了了解Kafka如何完成以上工作,我们来自下而上的来了解Kafka的功能。

首先了解一些概念:

  • Kafka是以集群的方式运行在一个或多个服务器上;
  • Kafka集群以目录的形式存储数据流,这种目录叫做topics;
  • 每条记录包含一个key,一个value和一个时间戳timestamp。
Kafka有四个核心APIs:
  • Producer API负责让应用在一个或多个Kafka topics上发布流数据;
  • Consumer API负责让应用在一个或多个topics上订阅和处理流数据;
  • Streams API负责让应用以流处理器一样工作,从一个或多个topics上消费输入流,然后向一个或多个topics上生产输出流,高效的将输入流转换成输出流;
  • Connector API负责通过构建可复用的生产者或消费者,连接Kafka topics到已经存在的应用或数据系统。例如一个关系型数据库的connector能够捕获表的每处修改。

Kafka的客户端和服务端是通过一种简单高效的TCP传输协议进行通信的。Kafka的客户端支持多种语言,

Topics和Logs
一个topic是一个数据发布目录,可以供零个,一个或多个消费者订阅。
对于每个topic,Kafka集群会维护一个分了区的log,如下图所示:


每个partition是一个有序的,不变的数据序列,并且连续存储在一个结构化的log中。在partition中的每条记录都有一个顺序增长的id,叫做offset,是数据在partition中的唯一识别码。
无论数据是否被消费,在一个可配置的存储周期内,Kafka集群保留所有已发布的数据。消费者可以控制offset的值来读取数据,例如消费者可以重置offset值来重新处理旧数据。

分布式
log的所有partitions被分布的存储到Kafka集群中不同的server上,为了容错,每个partition在不同server上有备份,数量可以在配置文件中设置。
每个partition有一个server是主的,其它0个或多个是从的。主server负责所有读写请求,从server被动同步主server数据。如果主server当机,其它从server自动转换为主server。每个server都是一些partition的主server,同时也是一些partition的从server,这样就保证了负责均衡。

生产者(Producers)
生产者可以发布数据到topics上,生产者负责指定那条数据放在topic上的哪个partition上,partition的选择可以简单的依据round-robin循环来保证负载均衡,或者根据其他语义信息,最常见的是根据秒数。

消费者(Consumers)
消费者可以自发分组,每个组内的消费者都会从一个消费者实例(instance)中收到已订阅的topic上的数据。消费者实例(instances)可以运行在不同的进程或不同的机器上。
如果所有消费者实例有相同的消费者组,那么数据可以有效的负载均衡。
如果所有消费者实例有不同的消费者组,那么每条数据会被广播到所有消费者进程。
一般情况下消费者组数量并不会太多,为了扩展和容错,每个组会包含很多消费者实例,这也是发布和订阅的逻辑所在。

Kafka只保证partition内记录有序。

数据一致性保障
  • 生产者向一个topic的partition发送的信息会被按先后顺序加入到指定的partition中,先到的消息offset会小于后到的消息offset
  • 数据存储顺序和消费者实例看到的一致
  • 对于一个topic的冗余备份参数N,最多可以容忍N-1个server宕机,而不丢失任何数据。
Kafka作为一个消息系统
优点:分组广播,消费者之间互不影响数据顺序。

Kafka作为一个存储系统
优点:
  • Kafka数据是写在磁盘上的,并且有多个备份,所有备份写入完成才算一次写入成功。
  • Kafka的磁盘结构非常适合扩展,无论是50KB还是50TB的持久化数据,Kafka的表现都非常好。
  • 可以把Kafka看作一个高效率,低延迟的分布式文件系统,适合作为日志存储,备份使用。
Kafka作为实时数据流处理工具
优点:提供完整的流处理API,也就是producer和comsumer的API,能够对数据流进行聚合处理。

总结,
作为一个分布式流数据平台,它兼具消息处理,存储,流处理功能于一身。
能像分布式文件系统例如HDFS一样存储静态文件,高效的存储和处理历史数据。
能像一个企业级消息系统一样处理实时消息。
通过存储和低延时的订阅模式,Kafka提供了对历史数据和实时数据的高可用性。

0 0
原创粉丝点击