详解Kafka: 大数据开发最火的核心技术

 
架构师技术联盟 2019-06-10 09:23:51 本文共3268个字,预计阅读需要9分钟。
广告

大数据时代来临,如果你还不知道Kafka那你就真的out了(快速掌握Kafka请参考文章:如何全方位掌握Kafka核心技术)!据统计,有三分之一的世界财富500强企业正在使用Kafka,包括所有TOP10旅游公司,7家TOP10银行,8家TOP10保险公司,9家TOP10电信公司等等。

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用于将数据流到数据湖、应用和实时流分析系统中。

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总是在主题日志的末尾写入,所以它的消费速度不会受到大小的影响。

本文由 架构师技术联盟 发布在 ITPUB,转载此文请保持文章完整性,并请附上文章来源(ITPUB)及本页链接。
原文链接:http://www.itpub.net/2019/06/10/2112/

    • 发布在

大数据

详解Kafka: 大数据开发最火的核心技术的更多相关文章

  1. 【转】 详解Kafka生产者Producer配置

    粘贴一下这个配置,与我自己的程序做对比,看看能不能完善我的异步带代码:   -----------------------------------------    详解Kafka生产者Produce ...

  2. 详解vue的数据binding原理

    自从angular火了以后,各种mv*框架喷涌而出,angular虽然比较火,但是他的坑还是蛮多的,还有许多性能问题被人们吐槽.比如坑爹的脏检查机制,数据binding是受人喜爱的,脏检查就有点…性能 ...

  3. 大数据开发实战:MapReduce内部原理实践

    下面结合具体的例子详述MapReduce的工作原理和过程. 以统计一个大文件中各个单词的出现次数为例来讲述,假设本文用到输入文件有以下两个: 文件1: big data offline data on ...

  4. 大数据开发-Spark-拷问灵魂的5个问题

    1.Spark计算依赖内存,如果目前只有10g内存,但是需要将500G的文件排序并输出,需要如何操作? ①.把磁盘上的500G数据分割为100块(chunks),每份5GB.(注意,要留一些系统空间! ...

  5. 大数据开发-从cogroup的实现来看join是宽依赖还是窄依赖

    前面一篇文章提到大数据开发-Spark Join原理详解,本文从源码角度来看cogroup 的join实现 1.分析下面的代码 import org.apache.spark.rdd.RDD impo ...

  6. 【转载】NeurIPS 2018 | 腾讯AI Lab详解3大热点:模型压缩、机器学习及最优化算法

    原文:NeurIPS 2018 | 腾讯AI Lab详解3大热点:模型压缩.机器学习及最优化算法 导读 AI领域顶会NeurIPS正在加拿大蒙特利尔举办.本文针对实验室关注的几个研究热点,模型压缩.自 ...

  7. 大数据开发实战:Spark Streaming流计算开发

    1.背景介绍 Storm以及离线数据平台的MapReduce和Hive构成了Hadoop生态对实时和离线数据处理的一套完整处理解决方案.除了此套解决方案之外,还有一种非常流行的而且完整的离线和 实时数 ...

  8. LigerUI之Grid使用详解(三)——字典数据展示

    一.问题概述 在开发web信息管理系统时,使用Web前端框架可以帮助我们快速搭建一组风格统一的界面效果,而且能够解决大多数浏览器兼容问题,提升开发效率.在关于LigerGrid的前两篇的内容里,给大家 ...

  9. LWIP network interface 即 LWIP 的 硬件 数据 接口 移植 首先 详解 STM32 以太网数据 到达 的第一站: ETH DMA 中断函数

    要 运行  LWIP  不光 要实现  OS  的 一些 接口  ,还要 有 硬件 数据 接口 移植 ,即 网线上 来的 数据 怎么个形式 传递给  LWIP ,去解析 做出相应的 应答  ,2017 ...

随机推荐

  1. Python开发【第四章】:函数剖析

    一.Python函数剖析 1.函数的调用顺序 #!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian #函数错误的调用方式 def fun ...

  2. Struts2简介、初步使用

    今日分享的是楼楼新学的一个框架,Struts2: 一:Struts2简介: Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2 ...

  3. js对象 c#对象转换

    前台页面 js 创建对象 let t = {}; 数组对象 let c = []; c.push({}) ;// 添加对象 以string格式 传递 JSON JSON.stringify(c); c ...

  4. Tomcat server.xml port server context 配置

  5. 前端开发 Vue -0前言

    Vue2.0 新手完全填坑攻略——从环境搭建到发布 Vue2 入门,读这篇就够了 Jinkey原创感谢 showonne.yubang 技术指导Demo 地址:http://demo.jinkey.i ...

  6. RMQ((Range Minimum/Maximum Query))ST算法

    给定一个数组,求出给定区间[l,r]中元素的最大值或最小值或者最值的索引. 一看到这个题目,简单,看我暴力出奇迹.暴力当然是可行的.但是时间复杂度很高(O(n^2)).线段树,树状数组也可以解决这个问 ...

  7. bat实现守护程序保证平台正常运行

    1.systeminfo查看系统最近一次重启时间: 2.杀进程: :start taskkill /f /im "xx.exe" goto start "xx.exe&q ...

  8. JAVA基于PDF box将PDF转为图片

    在一项目中用到,本身我是.NET的,团队中有用到JAVA,故此我处理这个功能,记录以下备用. 1.引用:fontbox-2.0.16.jar.pdfbox-app-2.0.16.jar 版本一定要正确 ...

  9. Image Processing and Analysis_15_Image Registration: A Method for Registration of 3-D shapes——1992

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

  10. Mybatis在xml文件中处理大于、小于、不等于号的方法

    在mapper.xml使用大于.小于等符号会和xml语法冲突,解决冲突有两种方式. 方法一: 使用转义字符: 字符名称 字符符号 转义字符 大于号 > > 小于号 < < 与 ...