
大数据时代来临,若是你还不知道Kafka那你就真的out了(快速掌握Kafka请参考文章:如何全方位掌握Kafka核心技术)!据统计,有三分之一的世界财富500强企业正在使用Kafka,包括全部TOP10旅游公司,7家TOP10银行,8家TOP10保险公司,9家TOP10电信公司等等。react
LinkedIn、Microsoft和Netflix天天都用Kafka处理万亿级的信息。Kafka主要应用于实时信息流的大数据收集或者实时分析(或者二者兼有)。Kafka既能够为内存微服务提供持久性服务,也能够用于向复琐事件流系统和IoT/IFTTT式自动化系统反馈事件。编程
为何是Kafka?
Kafka经常使用于实时流数据结构的实时分析。因为Kafka是一种快速、可扩展、可持久和高容错的发布-订阅消息系统(publish-subscribe messaging system),因此Kafka对于一些Use Case(有大数据量和高响应需求)的支持远好于JMS、RabbitMQ和AMQP。相比于那些工具,Kafka支持更高的吞吐量,更高的稳定性和副本(replication)特性。这使得它比传统的MOM更加适合跟踪服务调用(能够跟踪每次调用)或跟踪IoT传感器数据。服务器
Kafka能够与Flume/Flafka、Spark Streaming、Storm、HBase、Flink以及Spark配合使用,用于实时获取、分析和处理流数据。Kafka能够为Hadoop大数据湖(Hadoop BigData lake)提供数据流。Kafka Broker支持在Hadoop或Spark中低延时地处理和分析海量信息流。此外,Kafka子项目KafkaStreaming可用于实时分析。数据结构
什么是Kafka Use Case?
简而言之,Kafka用于流处理、网站活动跟踪、度量收集和监视、日志聚合、实时分析、CEP、将数据注入Spark和Hadoop、CQRS、重放消息、错误恢复以及分布式提交内存计算(微服务)的日志。架构
谁在使用Kafka?
许多须要快速处理大量数据的大公司都在使用Kafka。Kafka最初是由LinkedIn开发,用它来跟踪活动数据和运营指标。Twitter把它做为Storm的一部分来做为流处理的基础。Square把Kafka看成总线,将全部系统事件(日志,自定义事件,指标等)传输到各个Square数据中心,或者输出到Splunk,或者应用于Graphite(仪表板),或者实现Esper-like/ CEP警报系统。Spotify,Uber,Tumbler,Goldman Sachs,PayPal,Box,Cisco,CloudFlare和Netflix等公司也都在使用它。编程语言
为何Kafka这么流行
首先最主要的缘由是Kafka具备极佳的性能表现。它很是稳定,能提供稳定的持久化,具备灵活的订阅-发布消息队列,可与N个消费者群组进行良好扩展,具备强大的复制功能,为生产者提供可调整的一致性保证,并在碎片级别提供保留排序(即Kafka主题分区)。分布式
其次,Kafka能够很好地兼容须要数据流处理的系统,并将这些系统融合、转换并加载到其余存储。另外,Kafka操做(配置和使用)都很是简单,并且Kafka的工做原理也很好理解。固然了,若是Kafka处理数据很慢,有再多其余优势都是没有意义的,因此,“多快好省”就是Kafka的最大优点。微服务
为何Kafka这么快
Kafka基于zero copy原则,深度依靠操做系统内核实现快速移动数据。Kafka能将数据记录分批处理。这些批次数据能够经过端到端的方式从生产者到文件系统(Kafka主题日志)再到消费者。批处理能实现更高效的数据压缩并减小I / O延迟。Kafka将不可变的提交日志写入连续磁盘,从而避免了随机磁盘访问和磁盘寻道速度慢的问题。Kafka支持增长分区进行横向扩展。它将主题日志分红几百个(可能有数千个)分区分布到数千个服务器。这种方式可让Kafka承载海量负载。工具
Kafka Streaming
Kafka最经常使用于将数据实时传输到其余系统。Kafka做为一个中间层来解耦不一样的实时数据管道。Kafka核心并不适合入数据聚合(Data Aggregation)或CEP等的直接计算。Kafka Streaming做为Kafka生态系统的一部分,提供了进行实时分析的能力。Kafka能够为 Storm、Flink、Spark Streaming以及你的服务和CEP系统提供快速通道系统(实时操做数据系统)。
Kafka也用于流数据批量数据分析。它将数据传输到大数据平台或RDBMS、Cassandra、Spark甚至S3中用于将来的数据分析。这些数据存储一般支持数据分析,报告,数据科学分析,合规性审计和备份。说了那么多,让咱们来讨论一个终极命题:
到底什么是Kafka?
Kafka是一个分布式流平台,用于发布和订阅记录流。Kafka能够用于容错存储。Kafka将主题日志分区复制到多个服务器。Kafka的设计目的是为了让你的应用能在记录生成后当即就能处理。Kafka的处理速度很快,经过批处理和压缩记录有效地使用IO。Kafka会对数据流进行解耦。Kafka用于将数据流到数据湖、应用和实时流分析系统中。oop

Kafka支持多语言
客户端和服务器之间的Kafka通讯使用基于TCP的线路协议,该协议是版本化和文档化的。Kafka承诺保持对老客户端的向后兼容性,并支持多种语言,包括C#,Java,C,Python,Ruby等多种语言。Kafka生态系统还提供REST代理,可经过HTTP和JSON轻松集成。Kafka还经过Kafka的融合模式注册(ConfluentSchema Registry)支持Avro模式。Avro和模式注册容许客户以多种编程语言制做和读取复杂的记录,并容许记录的变化。
Kafka的用途
Kafka支持构建实时流数据管道。Kafka支持内存微服务(好比actors,Akka,Baratine.io,QBit,reactors,reactive,,Vert.x,RxJava,Spring Reactor)。Kafka支持构建实时流应用程序,进行实时数据分析,转换,响应,聚合、加入实时数据流以及执行CEP。
Kafka能够用来协助收集度量标准或KPI,从多个来源收集统计信息并实现eventsourcing(将应用状态的全部更改捕获为事件序列)。能够将它与内存微服务和actor系统一块儿使用,以实现内中服务(分布式系统的外部提交日志)。
Kafka能够用来在节点之间复制数据,为节点从新同步以及恢复状态。虽然Kafka主要用于实时数据分析和流处理,但也能够将其用于日志聚合,消息传递,跟踪点击流,审计跟踪等等。
Kafka可扩展的消息存储
Kafka是一个很好的记录或信息存储系统。Kafka就像一个提交日志存储和复制的高速文件系统。这些特色使Kafka适用于各类应用场合。写入Kafka主题的记录会持久保存到磁盘并复制到其余服务器以实现容错。因为如今磁盘速度快并且至关大,因此这种方式很是有用。Kafka生产者能够等待确认,因此消息是持久的,由于生产者在复制完成以前不会完成写入操做。Kafka磁盘结构能够很好地扩展。磁盘在大批量流式传输时具备很是高的吞吐量。
此外,Kafka客户端和消费者能够控制读取位置(偏移量),这容许在出现重要错误(即修复错误和重放)时重播日志等用例。并且,因为偏移量是按照每一个消费者群体进行跟踪的,因此消费者能够很是灵活地重播日志。
Kafka的记录保留
Kafka集群保留全部公布的记录。若是没有设置限制,它将保留全部记录直到磁盘空间不足。能够设置基于时间的限制(可配置的保留期限),也能够基于空间的限制(可根据存储空间进行配置)或精简(保留最新版本的记录)。除非被时间,空间或精简等策略删除,主题日志中的记录一直处于可用状态。因为Kafka老是在主题日志的末尾写入,因此它的消费速度不会受到大小的影响。