一、Kafka是什么

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。该项目的目标是为处理实时数据提供一个统一、高吞吐、低延迟的消息队列平台。其持久化层本质上是一个“按照分布式事务日志架构的大规模发布/订阅消息队列”,这使它作为企业级基础设施来处理流式数据非常有价值。此外,Kafka可以通过Kafka Connect连接到外部系统(用于数据输入/输出),并提供了Kafka Streams——一个Java流式处理库

基本特性

通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。

高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。

支持通过Kafka服务器和消费机集群来分区消息。

二、kafka的诞生和由来历史

Kafka最初是由领英(Linkedin)开发,并随后于2011年初开源,并于2012年10月23日由Apache Incubator孵化出站。

kafka的诞生,最初是为了解决linkedin的数据管道问题。起初Linkedin采用了ActiveMQ来进行数据交换,大约是在2010年前后,那时的ActiveMQ还远远无法满足Linkedin对数据传递系统的要求,经常由于各种缺陷而导致消息阻塞或者服务无法正常访问,为了能够解决这个问题,Linkedin决定研发自己的消息传递系统,当时linkedin的首席架构师Jay Kreps 便开始组织团队进行消息传递系统的研发。

2014年11月,几个曾在领英为Kafka工作的工程师,创建了名为Confluent的新公司,并着眼于Kafka。根据2014年Quora的帖子,Jay Kreps似乎已经将它以作家弗朗茨·卡夫卡命名。Kreps选择将该系统以一个作家命名是因为,它是“一个用于优化写作的系统”,而且他很喜欢卡夫卡的作品。因此取了个和消息传递系统完全不相干的名称kafka,该名字并没有特别的含义。

三、Kafka流行的原因

Kafka 备受开发者青睐,与它所“扮演”的三大角色是分不开的: 1、消息系统: Kafka 和传统的消息系统(也称作消息中间件〉都具备系统解稿、冗余存 储、流量削峰、缓冲、异步通信、扩展性、可恢复性等功能。与此同时, Kafka 还提 供了大多数消息系统难以实现的消息顺序性保障及回溯消费的功能。 2、存储系统: Kafka 把消息持久化到磁盘,相比于其他基于内存存储的系统而言,有效 地降低了数据丢失的风险。也正是得益于Kafka 的消息持久化功能和多副本机制,我 们可以把Kafka 作为长期的数据存储系统来使用,只需要把对应的数据保留策略设置 为“永久”或启用主题的日志压缩功能即可。 3、流式处理平台: Kafka 不仅为每个流行的流式处理框架提供了可靠的数据来源,还提 供了一个完整的流式处理类库,比如窗口、连接、变换和聚合等各类操作。

四、使用场景

1、消息队列相关场景

消息队列是分布式系统中重要的组件,kafka就可以看做是一种消息队列,其大致使用场景:

  • 应用解耦
    降低模块与模块之间的调用强依赖关系,不直接调用管理系统。如业务中台系统,需要通知下游系统消息数据,如果直接由交给业务中台调用下游系统接口,会出现依赖倒置的情况。
  • 异步通信
    异步通信的消息,不需要等待其他系统的完成响应,提升系统的并发能
  • 削峰填谷

2、网站活动跟踪

实时收集网站活动数据(例如注册、登录、下单、充值、支付等),根据业务数据类型将消息发布到不同的Topic,然后利用订阅消息的实时投递,将消息流用于实时处理、实时监控或者加载到Hadoop、MaxCompute等离线数据仓库系统进行离线处理。

3、日志聚合

许多公司,例如淘宝、天猫等,每天都会产生大量的日志(一般为流式数据,例如搜索引擎PV、查询等)。相较于以日志为中心的系统,例如Scribe和Flume,消息队列Kafka版在具备高性能的同时,可以实现更强的数据持久化以及更短的端到端响应时间。消息队列Kafka版的这种特性决定它适合作为日志收集中心。消息队列Kafka版忽略掉文件的细节,可以将多台主机或应用的日志数据抽象成一个个日志或事件的消息流,异步发送到消息队列Kafka版集群,从而实现非常低的RT。消息队列Kafka版客户端可批量提交消息和压缩消息,对生产者而言几乎感觉不到性能的开支。消费者可以使用Hadoop、MaxCompute等离线仓库存储和Strom、Spark等实时在线分析系统对日志进行统计分析

4、流计算处理

在很多领域,如股市走向分析、气象数据测控、网站用户行为分析,由于数据产生快、实时性强且量大,很难统一采集这些数据并将其入库存储后再做处理,这便导致传统的数据处理架构不能满足需求。与传统架构不同,消息队列Kafka版以及Storm、Samza、Spark等流计算引擎的出现,就是为了更好地解决这类数据在处理过程中遇到的问题,流计算模型能实现在数据流动的过程中对数据进行实时地捕捉和处理,并根据业务需求进行计算分析,最终把结果保存或者分发给需要的组件。