目前基于ELK架构的日志系统,通过filebeat收集上来的日志都会发送到同一个kafka topic中,然后再由Logstash消费处理写入Elasticsearch中,这种方式导致该topic包含所有业务日志,那么各个业务去做实时统计分析就会造成重复消费,使得流量成本的浪费;对于离线分析的日志来源是通过在应用服务端定时上传的方式,对于日志量比较大的业务,一方面上传时会对应用服务器造成比较大的压力,另一方面这种上传方式对于后续小时或者分钟级别分析造成一定延时。

本文将会介绍基于Flink的日志采集平台来解决这些问题。

采集架构

拆分:最上层Kafka A表示由filebeat收集上来的应用日志,然后通过Flink程序对Kafka topic进行拆分,根据不同的业务拆分到到下游Kafka B不同的topic中,那么对于下游的实时处理任务只需要消费对应的业务日志即可,避免了重复消费;

转储:对于发送到Kafka B不同的业务日志,通过Flink程序转储写入到HDFS上,生成小时分区文件,供后续的离线日志分析

拆分实现

避免重复消费:为了避免对大topic的重复消费,对于同一个topic只会消费一次,也就是只会启动一个Flink任务,按照一定的规则对数据进行拆分,常见的规则就是应用名称、类型、日志文件名称等,在filebeat收集的时候这些信息都会被带上,作为拆分的依据;

可配置化:为了满足业务方能够快速获取自己的业务日志,就必须提供可配置规则的可视化界面,提供填写拆分应用标识、目标Kafka topic等,将这些规则信息保存在数据库中,然后拆分的Flink任务定时加载规则信息;

日志格式:在实践中规定日志格式是非常有必要的,为了保证拆分任务能够准确的拆分出对应的业务日志,就必须按照指定的日志格式进行打点

转储实现

通用实现:对于不同的业务日志,其日志的具体内容肯定各不相同,对于我们来说不可能每一个业务都去写一套转储的程序,希望一套程序能够处理所有的业务日志,因此对于我们来说不管任何日志对于我们来说其所代表的含义就是一个data字段对应的数据,那么就只需要把这个data字段写入到对应的hdfs目录文件即可;

数据分区:默认分区字段根据日志中一个固定的时间字段进行分区,在实践中对于老的日志并没有按照规范日志进行打点或者分区的时间字段不是通用的一个字段,需要按照日志中一个特殊的字段解析进行分区,如果将这个解析直接放在程序里面根据业务判断,最终的结果会造成代码很难维护,解决方式就是将DataStream处理转换为Table/SQL 的处理,将数据流注册成表,然后通过udf去解析出来需要的分区字段,同样这个udf无法通用,那么就必须支持不同的udf,但是对于处理却是通用的,例如: select data,udf(data) from tbl , 是一个固定的模板,只需要对于不同的转储程序加载不同的udf即可,通过Calcite 做sql语法解析,解析出使用的udf, 然后将其注册即可;

可配置化:同样需要提供界面让业务只需要通过配置一些规则即可完成日志的收集,配置消费的topic、写入数据位置、自定义分区语句支持(上面提到的自定义udf)等,在后台自动完成日志的收集开启;

其他几点: 在实现过程中可能会存在集群迁移的场景,即将数据写入到另外的一个集群中,对于bulk的文件写入方式,其文件的滚动会在每次checkpoint使文件滚动,使用的滚动策略实现是OnCheckpointRollingPolicy,因此可以直接将hdfs文件copy到另外一个集群中,重新消费kafka的offset与生成的文件是同步的,但是存在另外一个问题,在hdfs上文件名称的生成规则是part-subtask-index,此时切换集群任务没有从checkpoint恢复index重新从0开始递增,存在覆盖以前文件的风险,因此对文件生成规则进行自定义,例如加上集群标识等。

总结

本篇主要介绍了基于Flink的采集架构以及一些关键的实现点,欢迎交流。

基于Flink的日志采集相关推荐

  1. 网易基于Filebeat的日志采集服务设计与实践

    - 背景 - 云原生技术大潮已经来临,技术变革迫在眉睫. 在这股技术潮流之中,网易推出了 轻舟微服务平台,集成了微服务.Service Mesh.容器云.DevOps等组件,已经广泛应用于公司内部,同 ...

  2. drools动态配置规则_基于 Flink 和 Drools 的实时日志处理

    背景 日志系统接入的日志种类多.格式复杂多样,主流的有以下几种日志: filebeat采集到的文本日志,格式多样 winbeat采集到的操作系统日志 设备上报到logstash的syslog日志 接入 ...

  3. 大数据之路读书笔记-02日志采集

    大数据之路读书笔记-02日志采集 数据采集作为阿里大数据系统体系的第 环尤为重要.因此阿里巴巴建立了一套标准的数据采集体系方案,致力全面.高性能.规范地完成海量数据的采集,并将其传输到大数据平台.本章 ...

  4. Flink从入门到精通100篇(四)-基于 Flink 和 Drools 的实时日志处理

    背景 日志系统接入的日志种类多.格式复杂多样,主流的有以下几种日志: filebeat采集到的文本日志,格式多样 winbeat采集到的操作系统日志 设备上报到logstash的syslog日志 接入 ...

  5. 基于Flink的实时日志分析系统实践

    前言 目前业界基于 Hadoop 技术栈的底层计算平台越发稳定成熟,计算能力不再成为主要瓶颈. 多样化的数据.复杂的业务分析需求.系统稳定性.数据可靠性, 这些软性要求, 逐渐成为日志分析系统面对的主 ...

  6. 日均百亿级日志处理:微博基于Flink的实时计算平台建设

    来自:DBAplus社群 作者介绍 吕永卫,微博广告资深数据开发工程师,实时数据项目组负责人. 黄鹏,微博广告实时数据开发工程师,负责法拉第实验平台数据开发.实时数据关联平台.实时算法特征数据计算.实 ...

  7. php怎么把日志推送过去_实践 | 基于Flink的用户行为日志分析系统

    用户行为日志分析是实时数据处理很常见的一个应用场景,比如常见的PV.UV统计.本文将基于Flink从0到1构建一个用户行为日志分析系统,包括架构设计与代码实现.本文分享将完整呈现日志分析系统的数据处理 ...

  8. 基于 Golang 的云原生日志采集服务设计与实践

    云原生技术大潮已经来临,技术变革迫在眉睫. 在这股技术潮流之中,网易推出了轻舟微服务云平台,集成了微服务.Servicemesh.容器云.DevOps等,已经广泛应用于公司集团内部,同时也支撑了很多外 ...

  9. 基于Golang的云原生日志采集服务设计与实践

    一.背景 云原生技术大潮已经来临,技术变革迫在眉睫. 在这股技术潮流之中,网易推出了轻舟微服务云平台,集成了微服务.Servicemesh.容器云.DevOps等,已经广泛应用于公司集团内部,同时也支 ...

最新文章

  1. JAVAEclipse:could not find the main class,program will exit!
  2. HTML5响应式企业集团织梦模板,响应式HTML5信息产业企业集团网站织梦模板
  3. Chisel_LLDB调试命令
  4. hdu1572 水搜索
  5. 使用SAP WebIDE往Github上推送代码修改时遇到错误消息 Commit request failed Commit failed. Ref must be HEAD and is HEAD
  6. 【渝粤教育】电大中专电商运营实操 (18)作业 题库
  7. LeetCode 67. 二进制求和
  8. 看这篇就够了!一文读懂拜占庭将军问题
  9. latex中怎么设置每一行文字都对齐_LaTeX技巧870:Latex如何在设置行距后让字体垂直居中?...
  10. mysql workbench首页_MySQL Workbench是干什么的?
  11. Spring Bean生命周期-prepareRefresh(二)
  12. 为什么国内抖音没有网页版,原因竟然是这样!
  13. Java随机产生两位数正整数
  14. dw2017不显示动画_10个创建2017年动画视频的最佳工具
  15. 36篇精品文章搞定所有TOEIC单词
  16. 编译小米2s CyanogenMod 版本遇到的几个问题
  17. windows 10 内置 OpenSSH客户端
  18. 写论文的工具推荐(包括下载论文,写作,翻译等)
  19. vs2017编译iconv
  20. JAVA   变量

热门文章

  1. PPT是什么的缩写?
  2. R语言使用table函数统计dataframe数据中的离散变量(分类变量、因子变量)数据列的每一种水平的统计计数
  3. android骚年的年终总结和规划
  4. linux 网卡驱动编译安装包,linux网卡驱动程序的编译与安装
  5. 平台是怎么搭起来的(二)
  6. [企业管理]警示!软件行业收入不断降低的一个原因——初学者的问题与不良的资本家企图,一同在侵蚀着我们的生命!
  7. 男人创业了,女人苦吗?
  8. 千里眼摄像头支持对象存储吗_“无处安放”的海量数据,万能的对象存储
  9. linux编程本地套接字
  10. Flink(十):TaskManager 内存简介