来自 科技 2020-08-05 18:02 的文章

程序员基础解答:什么是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用于将数据流传输到数据库,应用程序和实时流分析系统中。

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

Kafka是多语种

来自客户端和服务器的Kafka通信使用经过版本控制和记录的TCP有线协议。Kafka承诺与较旧的客户端保持向后兼容性,并且支持多种语言。有C#,Java,C,Python,Ruby和许多其他语言的客户端。Kafka生态系统还提供REST代理,允许通过HTTP和JSON轻松集成,这使得集成更加容易。

Kafka还通过Confluent Schema Registry for Kafka支持Avro模式。Avro和Schema Registry允许客户端以多种编程语言生成和读取复杂的记录,并允许记录的演变。因此它是真正的多语种。

Kafka很有用

Kafka允许构建实时流数据管道。Kafka支持内存中的微服务(即actor,Akka, Baratine.io,QBit,reactor,reactive,Vert.x,RxJava和Spring Reactor)。Kafka允许构建对流做出反应的实时流应用程序,以进行实时数据分析,转换,反应,聚合,加入实时数据流,以及执行 CEP(复杂事件处理)。

我们可以使用Kafka来帮助收集指标/ KPI,汇总来自许多来源的统计信息以及实施事件源。可以将其与微服务(内存中)和参与者系统一起使用以实现内存服务(分布式系统的外部提交日志)。可以使用Kafka在节点之间复制数据,为节点重新同步以及恢复状态。尽管Kafka主要用于实时数据分析和流处理,但也可以将其用于日志聚合,消息传递,点击流跟踪,审计跟踪等。

在数据科学和分析非常重要的世界中,捕获数据以馈入数据湖和实时分析系统也 很重要。而且由于Kafka可以承受这些特别复杂的用例,因此Kafka至关重要。

Kafka是可伸缩的消息存储

Kafka是一个很好的记录/消息存储系统。Kafka就像高速文件系统一样,用于提交日志的存储和复制。这些特性使Kafka可用于各种应用程序。

写入Kafka主题的记录将保存到磁盘,并复制到其他服务器以实现容错。由于现代驱动器速度快且体积很大,因此非常适合并且非常有用。Kafka生产者可以等待确认,因此消息是持久的,因为在消息复制之前生产者的操作不会完成。Kafka磁盘结构可伸缩。当批量写入大量流时,现代磁盘驱动器具有很高的吞吐量。

同样,Kafka的客户和消费者可以控制读取位置(偏移量),这允许使用案例,例如,如果存在严重错误(例如,修复错误和重新播放),则重播日志。

Kafka的保留纪录

Kafka集群保留所有已发布的记录。如果未设置限制,它将保留记录,直到磁盘空间用完为止。您可以设置基于时间的限制(可配置的保留期限),基于大小的限制(可根据大小配置)或压缩(使用键保留最新的记录版本)。例如,您可以将保留策略设置为三天或两周或一个月。可以使用主题日志中的记录,直到按时间,大小或压缩将其丢弃。消耗速度不受大小影响,因为Kafka始终写入主题日志的末尾。