程序员基础解答:什么是Kafka?

Kafka的成长正在蹦沙卡拉卡!
在《财富》 500强公司中,超过三分之一的公司使用Kafka 。这些公司包括排名前十的旅行社,排名前十的银行中有七个,排名前十的保险公司中有八个,排名前十的电信公司中有九个,等等 。LinkedIn,Microsoft和Netflix每天使用Kafka(1,000,000,000,000)处理消息 。国内腾讯、阿里、特别是支付宝等,都大量在用 。
Kafka用于实时数据流,收集大数据或进行实时分析 。Kafka与内存中的微服务一起使用,提供持久性,并且可以将事件馈送到CEP(复杂事件流系统)和IoT / IFTTT风格的自动化系统 。
为什么选择Kafka?Kafka通常用于实时流数据架构中以提供实时分析 。由于Kafka是一种快速,可伸缩,持久且具有容错能力的发布系统,因此Kafka用于JMS、RabbitMQ和AMQP的用例中 。
Kafka具有更高的吞吐量,可靠性和复制特性,这使其可用于跟踪服务呼叫或跟踪可能不考虑传统MOM的IoT传感器数据之类的事 。
Kafka可以与Flume / Flafka,Spark Streaming,Storm,HBase,Flink和Spark一起使用,以实时提取,分析和处理流数据 。也是用于送Hadoop BigData的数据流 。同时它还代理支持大量消息流,以便在Hadoop或Spark中进行低延迟的后续分析 。此外,Kafka Streams(一个子项目)也可以用于实时分析 。
Kafka用例简而言之,Kafka用于流处理,网站活动跟踪,指标收集和监视,日志聚合,实时分析,CEP,将数据摄取到Spark中,将数据摄取到Hadoop,CQRS,重播消息,错误恢复和有保证的分布式提交用于内存计算(微服务)的日志 。
谁使用Kafka?许多处理大量数据的大公司都使用Kafka 。起源于LinkedIn的LinkedIn用来跟踪活动数据和运营指标 。Twitter将其用作Storm的一部分,以提供流处理基础结构 。Square使用Kafka作为总线,将所有系统事件移至各个Square数据中心(日志,自定义事件,指标等),向Splunk输出,用于Graphite(仪表板),并实现类似Esper/CEP警报系统 。
国外Spotify,Uber,Tumbler,Goldman Sachs,PayPal,Box,Cisco,CloudFlare和Netflix等其他公司也都会使用它 。

程序员基础解答:什么是Kafka?

文章插图
 
为什么Kafka如此受欢迎?Kafka具有操作简便性 。Kafka易于设置和使用,并且很容易弄清楚Kafka是如何工作的 。但是,Kafka受欢迎的主要原因是其出色的性能 。它稳定,提供可靠的耐用性,具有灵活的发布/队列,可以很好地适应N个消费者组,具有强大的复制能力,为生产者提供可调的一致性保证,并且可以在分片级别(即Kafka)提供保留的订购主题分区) 。
此外,Kafka可以与需要处理数据流的系统配合使用,并使这些系统能够聚合,转换并加载到其他商店中 。但是,如果Kafka慢一点,那么这些特征都将无关紧要 。
为什么Kafka这么快?Kafka非常依赖OS内核来快速移动数据 。它依赖零复制的原理。通过Kafka,可以将数据记录分批处理 。从生产者——文件系统(Kafka主题日志)——消费者这条路径中,可以端对端地查看这些批次的数据 。
批处理允许更有效的数据压缩并减少I / O延迟 。Kafka将不可变的提交日志顺序写入磁盘,从而避免了随机磁盘访问和缓慢的磁盘搜索 。并通过分片提供水平缩放 。它会将主题日志分片到数百个(可能是数千个)分区中,成千上万个服务器 。这种分片使Kafka可以处理大量负载 。
Kafka:流式架构Kafka最常用于将数据实时流式传输到其他系统中 。Kafka是中间层,用于分离实时数据管道 。
Kafka核心不适用于直接计算,例如数据聚合或CEP 。Kafka流是Kafka生态系统的一部分,提供了进行实时分析的功能 。
Kafka可用于为Storm,Flink,Spark流以及您的服务和CEP系统等快速通道系统(实时和操作数据系统)提供数据 。还用于流数据以进行批处理数据分析 。Kafka支持Hadoop 。它将数据流式传输到大数据平台或RDBMS,Cassandra,Spark甚至S3中,以进行将来的数据分析 。这些数据存储通常支持数据分析,报告,数据科学处理,合规性审核和备份 。
程序员基础解答:什么是Kafka?

文章插图
Kafka流架构图
 
现在,说了上面这些有的没的前缀,说说真正的问题:
什么是Kafka?Kafka是一个分布式流媒体平台,用于发布和订阅记录流 。Kafka用于容错存储 。Kafka将主题日志分区复制到多个服务器 。Kafka旨在允许您的应用程序在记录发生时进行处理 。Kafka快速且通过批处理和压缩记录来有效地使用IO 。Kafka用于解耦数据流 。Kafka用于将数据流传输到数据库,应用程序和实时流分析系统中 。


推荐阅读