大数据流处理技术选型汇总

表一: 流平台的质量属性

流平台当前版本主要推动者Event Size消息传递保证状态管理
Flume1.8.0Apple, Clouderasingleat least once事务型更新
NiFi1.5.0Hortonworkssingleat least once本地及分布式快照
Gearpump0.8.4singleIntel, Lightbendexactly once,若不需要支持容错,则为at least oncecheckpoints
ApexApex Core 3.6.0, Apex Malhar 3.8.0Data Torrentsingleexactly oncecheckpoints
Kafka Streams1.0Confluentsingleat least once本地及分布式快照
Spark Streaming2.2.1AMPLab, Databricksmicro-batchexactly once,若不需要支持容错,则为at least oncecheckpoints
Storm1.1.1Backtype, Twittersingleat least oncerecord acknowledgements
Samza0.14.0Linkedinsingleat least once本地快照,分布式快照则支持容错
Flink1.4.0dataArtisanssingleexactly once分布式快照
Ignite Streaming2.3.0GridGainsingleat least oncecheckpoints
Beam2.2.0Googlesingleexactly once事务型更新

表一(续):流平台的质量属性

流平台容错处理顺序事件的优先级WindowingBack-pressure(背压)
Flumeyes(只针对file channel)nononono
NiFiyesnoyesnoyes
Gearpumpyesyesprogrammabletime-basedyes
Apexyesnoprogrammabletime-basedyes
Kafka Streamsyesyesprogrammabletime-basedN/A
Spark Streamingyesnoprogrammabletime-basedyes
Stormyesyesprogrammabletime-based, count-basedyes
Samzayesyes(单分区情况则不支持)programmabletime-based, count-basedyes
Flinkyesyesprogrammabletime-based, count-basedyes
Ignite Streamingyesyesprogrammabletime-based, count-basedyes
Beamyesyesprogrammabletime-basedyes

表一(再续):流平台的质量属性

流平台数据抽象数据流延迟资源管理Auto-scaling
FlumeEventagentlownativeno
NiFiFlowFileflowconfigurablenativeno
GearpumpMessagestreaming applicationvery lowYARNno
ApexTuplestreaming applicationvery lowYARNyes
Kafka StreamsKafkaStreamprocess topologyvery lowYARN, Mesos, Chef, Puppet, Salt, Kubernetes等yes
Spark StreamingDStreamapplicationmediumYARN, Mesosyes
StormTupletopologyvery lowYARN, Mesosno
SamzaMessagejoblowYARNno
FlinkDataStreamstreaming dataflowlow(configurable)YARNno
Ignite StreamingIgniteDataStreamerjobvery lowYARN, Mesosno
BeamPCollectionpipelinelowintegratedyes

表一(终):流平台的质量属性

流平台热修改API主要开发语言API语言
FlumenodeclarativeJavatext files, Java
NiFiyescompositionalJavaREST(GUI)
GearpumpyesdeclarativeScalaScala, Java
ApexyesdeclarativeJavaJava
Kafka StreamsyesdeclarativeJavaJava
Spark StreamingnodeclarativeScalaScala, Java, Python
StormyescompositionalClojureScala, Java, Clojure, Python, Ruby
SamzanocompositionalScalaJava
FlinknodeclarativeJavaJava, Scala, Python
Ignite StreamingnodeclarativeJavaJava, .NET, C++
BeamnodeclarativeJavaJava

数据流模型

在进行流数据处理时,必然需要消费上游的数据源,并在处理数据后输出到指定的存储,以待之后的数据分析。站在流数据的角度,无论其对数据的抽象是什么,都可以视为是对消息的生产与消费。这个过程是一个数据流(data flow),那么负责参与其中的设计元素就可以称之为是“数据流模型(Data flow model)”。

不同流处理平台的数据流模型有自己的抽象定义,也提供了内建的支持。我针对Flume、Flink、Storm、Apex以及NiFi的数据流模型作了一个简单的总结。

Flume

Flume的数据流模型是在Agent中由Source、Channel与Sink组成。

内建的Source支持:

  • Avro
  • Thrift
  • JMS
  • Taildir
  • Exec
  • Spooling Directory
  • Twitter
  • Kafka
  • NetCat
  • Sequence Generator
  • Syslog
  • HTTP

内建的Sink支持:

  • HDFS
  • Hive
  • Logger
  • Avro
  • Thrift
  • IRC
  • File Roll
  • HBase
  • Solr
  • Elasticsearch
  • Kite Dataset
  • Kafka
  • HTTP

Flume还支持自定义Source、Sink与Channel。

Flink

Flink将数据流模型抽象为Connector。Connector将Source与Sink连接起来,一些特殊的connector则只有Source或Sink。Flink定义的connector包括:

  • Kafka(支持Source/Sink)
  • Elasticsearch(仅为Sink)
  • HDFS(仅为Sink)
  • RabbitMQ(支持Source/Sink)
  • Amazon Kinesis Streams(支持Source/Sink)
  • Twitter(仅为Source)
  • NiFi(支持Sink/Source)
  • Cassandra(仅为Sink)
  • Redis、Flume和ActiveMQ(仅为Sink)

Flink也支持用户自定义Connector。

Storm

Storm对数据流模型的抽象则形象地定义为Spout和Bolt。为了支持其他数据源的读取,并将数据存储到指定位置,Storm提供了与诸多外部系统的集成,并针对这些外部系统去定义对应的Spout与Bolt。

Storm集成的外部系统包括:

  • Kafka:通过BrokerHostsZKHosts支持Spout
  • HBase:提供HBaseBolt
  • HDFS:提供HdfsBolt
  • Hive:提供HiveBolt
  • Solr:提供SolrUpdateBolt与对应的Mapper
  • Canssandra:提供CassandraWriterBolt
  • JDBC:提供JdbcInsertBoltJdbcLookupBolt
  • JMS:提供JMS Spout与JMS Bolt
  • Redis:提供RedisLookupBoltRedisStoreBoltRedisFilterBolt
  • Event Hubs:提供了Event Hubs Spout
  • Elasticsearch:提供EsIndexBoltEsPercolateBoltEsLookupBolt
  • MQTT:MQTT主要用于物联网应用的轻量级发布/订阅协议,提供了对应的Spout
  • MongoDB:提供了MongoInsertBoltMongoUpdateBolt
  • OpenTSDB
  • Kinesis
  • Druid
  • Kestrel

Storm和Storm Trident都支持用户自定义Spout和Bolt。

Apex

Apex将数据流模型称之为Operators,并将其分离出来,放到单独的Apex Malhar中。对于Source,它将其称之为Input Operators,对于Sink,则称为Output Operators,而Comput Operators则负责对流数据的处理。

Apex Malhar支持的Input/Output Operators包括:

  • 文件系统:支持存储到HDFS、S3,也可以存储到NFS和本地文件系统
  • 关系型数据库:支持Oracle、MySQL、Sqlite等
  • NoSQL数据库:支持HBase、Cassandra、Accumulo、Aerospike、MongoDB和CouchDB
  • 消息系统:支持对Kafka、JMS、ZeroMQ和RabbitMQ消息的读写
  • 通知系统:支持通过SMTP发送通知
  • 内存数据库和缓存:支持Memcached和Redis
  • 社交媒体:支持Twitter
  • 协议:支持HTTP、RSS、Socket、WebSocket、FTP和MQTT

毫无疑问,Apex也支持用户自定义Operator。除了可以用Java编写之外,还可以使用JavaScript、Python、R和Ruby。

NiFi

NiFi对流模型的主要抽象为Processor,并且提供了非常丰富的数据源与数据目标的支持。

常用的数据采集方法包括:

  • GetFile
  • GetFtp
  • GetSFtp
  • GetJMSQueue
  • GetJMSTopic
  • GetHTTP
  • ListenHTTP
  • ListenUDP
  • GetHDFS
  • ListHDFS / FetchHDFS
  • FetchS3Objet
  • GetKafka
  • GetMongo
  • GetTwitter

发送数据的方法包括:

  • PutEmail
  • PutFile
  • PutFTP
  • putSFTP
  • PutJMS
  • PutSQL
  • PutKafka
  • PutMongo

Nifi也支持用户自定义Processor,例如通过继承NiFi定义的AbstractProcessor类。自定义的Processor可以和内建的Processor一样添加到NiFi定义Flow的GUI上,并对其进行配置。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值