IT开发篇:Apache Kafka简介
Posted IT与IC先生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IT开发篇:Apache Kafka简介相关的知识,希望对你有一定的参考价值。
流处理是与全局计算、batchprocessing不同的计算模型。批量处理将数据引向计算,流处理将计算引向数据。
请求应答模型最常用,缺点吞吐量小,每提交一次请求,都需很多时间来获等待结果。
批量处理模型也很常见,优点是吞吐量高,一次的请求和应答可以得出较多结果,缺点是延时太久,每12 小时才会运行一次。例如,某数据产生时间为上午6 时,则下午6 时才有结果。
流处理就是介于请求应答和批处理之间的一种新型计算模型或者编程模型,在这一模型中,数据本身就是数据流,数据流产生新数据时,立刻被计算、返回。
一、Kafka的概念
Kafka不仅基于内存来存储流数据,还能保证数据包不被及时消费时,依然可用且不被丢失。Kafka还提供了逻辑顺序,使得第一个数据比第二个数据先被消费。数据只要在Kafka 上,就能在Kafka周围进行业务开发或者认知事物开发。
Kafka是一个大规模的流数据平台,可以提供订阅和发布消息,提供缓存流数据存储平台、流数据处理平台。
流式计算在Kafka 上有3个应用。
一是DIY。Kafka提供了两个客户端,一个简单的发布者、一个简单的消费者。例如,利用消息消费者来实时消费数据,每当得到新的消费数据时,可做一些计算的结果,再通过数据发布者发布到Kafka 上,或者将它存储到第三方存储系统中。
二是进行开源、闭源的流处理平台,如spark。如果进行流处理操作,就要先拿出一个集群,且该集群包含所有必需内容,例如,如果你要用spark,那么必须用spark 的runtime。
三是使用一个轻量级流处理库,而不需要使用复杂的框架或者平台来适应不同需求。在Kafka 0.10 当中已发布轻量级流处理内容平台,它也是一个客户端,并支持state processing、Windows延时的、异步的、不同数据的调控。Kafka作为库,可以采用多种方法来发布流处理平台的使用。例如,可以构建一个集群,可以把它作为一个手提电脑来使用,还可以在黑莓上运行Kafka。
二、Kafka Stream 编程语言
Storm、Spark等流处理平台与Kafka Stream 高阶位DSL 语言相似。首先,定义一个Streams 流。Streams从topic1 中的topic 获取。获取新的数据流之后,写回Kafka topic2 内。
Kafka 的核心思想是,把这些消息全部存成有序日志,所有消息发布者把消息发布到底端,从某一逻辑的位移开始,顺序读取所有消息。
连接每个不同的运算单元,就得到一个Stream,即record stream,每一个Stream 都在源源不断地实时产生record,每一个record 是一个key 加一个value。每个用户定义的流的一个计算单位对应一个Stream Processor。
计算单元可分成两个特殊的单元,一个叫做元的计算单元,只有输出流,没有输入流。StreamProcessor 底端的数据流,没有输出流,只有输入流,它们的功能是把所有输入流写回到Kafka。
管理流处理的states 有两个方式,一个是remote State,利用远程的数据库或者远程的key value store 存储所有流处理的states,每一次计算时,发送一个远程请求来读取states。
另一方式是Local State,即所有state和处理单元并发在一起,每个单元上存着state。在Kafka Stream 里,各计算单元之间不需要交互,state之间也如此。
三、流与数据库表的关系
Kafka Streams 内有两种流——KStream和Ktable。
KStream在数据流之间不存在任何因果关系和逻辑关系,可以被认为是append only Stream。Typo是更新日志流,每个日志里面相同的key 所对应的就是对表的更新。
Kafka Stream 的DS有多种不同的操作,如aggregate、reduce等,不同的数据流可能将KStream 变成KTable,也可能把KTable 变回KStream,在用户定义不同的operation时,不同状态的流可采用不同计算方式、计算模型。
四、Kafka Stream 运维
Tables 和Stream 之间存在一一影射关系,KafkaStream 有效地利用了这一特性。例如,有个Kafka Stream 的应用业务,该业务有三个并发task,每个task 有自己的localstate,当State 更新时,KafkaStream 会自动将更新消息写到更新日志内,更新日志也自动生成。每更新一个状态时,消息日志就被更新到这一日志上。
五、时间管理
时间管理是流处理模型的重要概念,也是区别于流处理和批量式处理非常重要的概念。很多人都已熟悉Event Time 和Processing Time 的区别,EventTime 是每个日志、消息、状态的时间,ProcessingTime 是日志被计算和处理的时间。这两者可能不完全融合,这就是时间延迟。
Kafka Stream解决了这一问题。KafkaStream 允许给每个日志定义时间戳,该时间戳可以是当前系统时间,也可以提取时间戳。类似的,如果record 是一个Jason format,将其时间戳提取出来也可被定义成Event Time。
长按二维码,直接关注“IT与IC先生”。
剖析IC、支付、安全、移动互联网、IT运营领域的产业链关系、商业模式、产品设计、推广运营、关键技术、案例剖析。
以上是关于IT开发篇:Apache Kafka简介的主要内容,如果未能解决你的问题,请参考以下文章