大数据目前的处理方法有两种:一种是离线处理,一种是实时处理。如何构建我们自己的实时数据处理系统我们选用flume+kafka+flink+es来作为我们实时数据处理工具。因此我们的架构是:
flume集群
kafka集群
flink集群
es集群
其具体架构如图
对于flume集群,它的作用就是采集数据并将数据提供给kafka集群,我们可以通过topic来实现。
对于zookeeper-kafka集群,它的作用是存储flume提供的数据,并且将相应的topic对外开放。它的作用就相当于一个数据库(事实上它喜欢被动)
对于flink集群,它当然是消费kafka的message,并且对这些message进行各种犀利的处理(它对计算很擅长,对于关系并不像吹的那样牛逼也许是我们主要使用streamAPI而不是tableAPI的缘故)这里要声明的是我们做的是流式逐条数据处理。表关联和同表不同数据关联请先跑一遍mysql。因为tableAPI并不能支持我们之前用过的所有sql函数,当然最常见的SUM,AVG,COUNT等除外。曾经很SB的想用flink的tableAPI把大约3G的数据文件根据某个字段合并(i7 4核 16G内存的MBP跑了7分钟)觉得还是nio的0拷贝好一点随便七八十的分片并行(数据量大的话能把别的系统跑崩)对于连接ES和kafka的事交给flink的API仨字儿,真好用。
当然版本也要注意:我们flume => 1.8.0
zookeeper => 3.5.5
kafka => 2.11
flink => 1.9.1
ES => 7.2.0
具体配置下次再聊