大数据流处理平台的技术选型参考

选择太多,是一件好事情,不过也容易乱花渐欲迷人眼。倘若每个平台(技术)都去动手操练一下,似乎又太耗时间。通过阅读一些文档,可以帮我们快速做一次筛选。在将选择范围进一步缩小后,接下来就可以结合自己的应用场景去深入Spike,做深度的甄别,这是我做技术选型的一个方法。

技术没有最好,只有最适用。在做技术选型时,需要选择适合需求、适合项目类型、适合团队的技术。这是实用主义的判断,而非理想主义的追捧。若是在实用的技术选型中,再能点燃一些些技术上的情怀,那就perfect了!

属性矩阵(Attributes Matrix)

我在《Apache下流处理项目巡览》一文中翻译了Janakiram的这篇文章,介绍了Apache基金会下最主流的流处理项目。巧的是,我在InfoQ上又发现了Ian Hellstrom的文章,他用一张图给出了非常棒的总结。

为了更好地阅读,我将这张图的内容转成一张矩阵表。由于Ian的文章是2016年撰写的,我对其内容做了适度更新。

注:由于微信排版关系,若要查看技术选型的矩阵表,请点击文末的“阅读原文”查看详情。

数据流模型

在进行流数据处理时,必然需要消费上游的数据源,并在处理数据后输出到指定的存储,以待之后的数据分析。站在流数据的角度,无论其对数据的抽象是什么,都可以视为是对消息的生产与消费。这个过程是一个数据流(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上,并对其进行配置。

原文发布于微信公众号 - 逸言(YiYan_OneWord)

原文发表时间:2018-02-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云原生架构实践

JHipster技术简介

JHipster是一个开发平台,用于生成,开发,部署Spring Boot + Angular/React Web Application和Spring mic...

1.9K6
来自专栏架构师之旅

《Spring敲门砖之基础教程第一季》 第一章 概要介绍

百度百科say: Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spri...

1935
来自专栏牛客网

美团二面面经,Java后台开发

1530
来自专栏编程

熟悉java三大框架的作用

一、Spring Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类...

2068
来自专栏子勰随笔

SDK设计心得之错误码

5556
来自专栏有刻

Java 小记 — Spring Boot 的实践与思考

3629
来自专栏企鹅号快讯

成为Java高手的25个学习要点

. 很多人会问学java不知道该如何入手? 不知道学习的方向该怎么办? 有没有什么学习方法可以推荐? 想成为java高手,有没有一些可以衡量的标准呢? 本文就为...

1999
来自专栏程序员互动联盟

【编程技巧】成为Java技术大牛之25招必杀技

1. 你需要精通面向对象分析与设计(OOA/OOD)、设计模式(GOF,J2EEDP)以及综合模式。你应该了解UML,尤其是class、object、inter...

3746
来自专栏恰同学骚年

Spring Boot 1.5.x 基础学习示例

  今年从原来.Net Team“被”转到了Java Team开始了微服务开发的工作,接触了Spring Boot这个新瓶装旧酒的技术,也初步了解了微服务架构。...

903
来自专栏Java帮帮-微信公众号-技术文章全总结

8 个最好的 Java RESTful 框架

过去的每一年,涌现出越来越多的Java框架。就像JavaScript,每个人都认为他们知道一个好的框架的功能应该是怎么样的。连我的老祖母现在也使用 一个我从来没...

3105

扫码关注云+社区