初识kafka
简介
Kafka经常用于实时流数据架构,用于提供实时分析。本篇将会简单介绍kafka以及它为什么能够广泛应用。
kafka的增长是爆炸性的。2017年超过三分之一的世界五百强公司在使用kafka。这其中很多公司每天通过kafka处理超过TB级别的数据。kafka被用于实时数据流、收集大数据或者做一些实时分析。kafka是也为基于内存的微服务提供数据持久化并把数据传输给复杂的事件流系统和IOT模式的自动化系统。
为什么选择Kafka?
Kafka经常用于实时流数据架构,提供实时分析。由于Kafka是一种快速、可伸缩、持久和容错的发布-订阅消息传递系统,所以考虑到JMS、RabbitMQ和AMQP可能存在容量和响应性的不足,Kafka在某些情况下是更优选择。Kafka具有更高的吞吐量、可靠性和复制特性,这使得它适用于跟踪服务调用(跟踪每一个调用)或跟踪物联网传感器数据,而传统的MOM在这些方面有其自己的问题。
Kafka可以与Flume/Flafka、Spark Streaming、Storm、HBase、Flink和Spark一起工作,对流媒体数据进行实时摄取、分析和处理。Kafka为Hadoop BigData lakes 提供数据流。Kafka代理支持大量消息流,用于Hadoop或Spark的低延迟后续分析。此外,Kafka Streaming(子项目)也可以用于实时分析。
Kafka 使用情况
简而言之,Kafka用于流处理、网站活动跟踪、度量收集和监控、日志聚合、实时分析、CEP、将数据传输到Spark、将数据传输到Hadoop、CQRS、重放消息、错误恢复以及内存计算(微服务)的有保障的分布式提交日志。
那些人需要使用Kafka?
处理大量数据的大公司都使用Kafka。它的发源地LinkedIn使用它来跟踪活动数据和运营指标。Twitter将其作为Storm的一部分来提供流处理基础设施。Square使用Kafka作为总线,将所有系统事件转移到各个Square数据中心(日志、定制事件、度量等等),输出到Splunk,用于仪表板,并实现Esper-like/CEP警报系统。Spotify、Uber、Tumbler、高盛、贝宝(PayPal)、Box、思科(Cisco)、CloudFlare和Netflix等其他公司也在使用这个平台。
为什么如此流行?
首先,操作简单。Kafka是用来设置和使用的,并且很容易知道Kafka是如何工作的。然而,其受欢迎的主要原因是它的出色性能。同时它是稳定的,提供了可靠的持久性,具有灵活的发布-订阅/队列,可以很好地扩展到n个消费者组,具有健壮的复制,为生产者提供了可调的一致性保证,并在碎片级别(即Kafka主题分区)提供了保留的排序。此外,Kafka可以很好地处理具有数据流的系统,并使这些系统能够聚合、转换和加载到其他存储中。但如果kafka处理缓慢,其他优点也就都无关紧要。综上之所以受欢迎就是因为快。
为什么快?
Kafka严重依赖操作系统内核来快速移动数据。它基于零拷贝的原则。Kafka使您能够批量数据记录成块。可以看到这些批数据从生产者到文件系统(Kafka主题日志)到消费者。批处理允许更有效的数据压缩和减少I/O延迟。Kafka将不可变的提交日志按顺序写入磁盘,从而避免了随机磁盘访问和缓慢的磁盘查找。通过分片提供水平分割。它将主题日志分割成数百个(可能是数千个)到数千台服务器的分区。这种分片允许Kafka处理大量的负载。
Kafka: 数据流架构
Kafka经常被用于将实时数据流到其他系统中。Kafka是中间层,可以解耦你的实时数据管道。Kafka core不适合直接计算,比如数据聚合或CEP。Kafka流,是Kafka生态系统的一部分,提供实时分析的能力。Kafka可以提供快速通道系统(实时和操作数据系统),比如Storm, Flink, SparkStreaming,以及你的服务和CEP系统。Kafka还用于批量数据分析的数据流。它可以将数据流到您的大数据平台或RDBMS、Cassandra、Spark甚至S3中,以便将来进行一些数据分析。这些数据存储通常支持数据分析、报表、数据科学分析、审计和备份。
架构图
现在我们来回答一些问题。
Kafka是什么?
Kafka是一个分布式流媒体平台,用于发布和订阅记录流。Kafka用于容错存储。Kafka将主题日志分区复制到多个服务器。Kafka是设计处理来应用程序实时产生的数据。Kafka可以快速和有效地使用IO批处理和压缩数据。Kafka用于解耦数据流。也用于将数据流到数据湖、应用程序和实时流分析系统中。
Kafka 分离数据流
Kafka 支持多种开发语言
来自客户机和服务器的Kafka通信使用了TCP上的协议,经过版本化和文档化。Kafka承诺与老客户端保持向后兼容,并且支持许多语言。在c#、Java、C、Python、Ruby和许多其他语言中都有客户端。
Kafka生态系统还提供了REST代理,允许通过HTTP和JSON进行简单的集成,这使得集成更加容易。Kafka还通过Confluent模式注册表支持Avro模式。Avro和Schema Registry允许用多种编程语言生成和读取复杂的记录,并允许记录的演变。
Kafka 的价值
1.Kafka允许您构建实时流数据管道。Kafka支持内存中的微服务(即actor、Akka、Baratine.io, QBit,reactive,Vert.x, RxJava, Spring Reactor)。Kafka允许您构建实时流应用程序,对流进行实时数据分析、转换、反应、聚合、加入实时数据流,并执行CEP(复杂事件处理)。
2.您可以使用Kafka来帮助收集度量/ kpi、聚合来自许多来源的统计数据和实现事件源。您可以将其与微服务(内存中)和actor系统一起使用,以实现内存中的服务(分布式系统的外部提交日志)。
3.您可以使用Kafka在节点之间复制数据、重新同步节点和恢复状态。虽然Kafka主要用于实时数据分析和流处理,但也可以用于日志聚合、消息传递、点击流跟踪、审计跟踪等等
在一个数据科学和分析的世界里,捕获数据并将其输入到您的数据湖和实时分析系统也是一个大问题。既然kafka能够处理这些繁重的用例,那这就是它最大的价值所在。
Kafka 是可扩展的消息存储
Kafka是一个很好的记录/消息存储系统。Kafka就像高速文件系统,用于提交日志存储和复制。这些特性使得Kafka对于所有的应用方式都是有用的。写入到Kafka主题的记录将被持久化到磁盘,并复制到其他服务器以实现容错。由于现代驱动器又快又大,所以它很适合,而且非常有用。Kafka生产者可以等待确认,所以消息是持久的,因为生产者写如完整直到消息复制完成。硬盘架构可很好地伸缩因为现代磁盘驱动器在批量写入时具有很高的吞吐量。此外,Kafka客户端和消费者可以控制读位置(偏移量),这允许用例在有关键错误时重放日志(即修复错误和重播)。由于偏移量是按每个消费者组进行跟踪的,因此消费者可以相当灵活(即重放日志)。
Kafka 会保留消费记录
Kafka集群保留所有已发布的记录。如果不设置限制,它将保存记录,直到耗尽磁盘空间。您可以设置基于时间的限制(可配置保留期)、基于大小的限制(可根据大小配置)或压缩(使用键保存最新版本的记录)。例如,你可以设定3天、2周或1个月的保留政策。主题日志中的记录可供使用,直到根据时间、大小或压缩丢弃为止。消费速度不受大小的影响,因为Kafka总是写到主题日志的末尾。
Kafka经常用于实时流数据架构,提供实时分析。由于Kafka是一种快速、可伸缩、持久和容错的发布-订阅消息传递系统,所以Kafka在某些情况下甚至不会考虑JMS、RabbitMQ和AMQP,因为它的容量和响应性。Kafka具有更高的吞吐量、可靠性和复制特性,这使得它适用于跟踪服务调用(跟踪每一个调用)或跟踪物联网传感器数据,而传统的MOM可能不会被考虑在内。