点击上方蓝色字体,选择“设为星标

回复”资源“获取更多资源

大数据技术与架构

点击右侧关注,大数据开发领域最强公众号!

大数据真好玩

点击右侧关注,大数据真好玩!

大数据平台每天会产生大量的日志,处理这些日志需要特定的日志系统。

一般而言,这些系统需要具有以下特征:

  • 构建应用系统和分析系统的桥梁,并将它们之间的关联解耦

  • 支持近实时的在线分析系统和类似于Hadoop之类的离线分析系统

  • 具有高可扩展性。即:当数据量增加时,可以通过增加节点进行水平扩展

为此建议将日志采集分析系统分为如下几个模块:

  • 数据采集模块:负责从各节点上实时采集数据,建议选用Flume-NG来实现。

  • 数据接入模块:由于采集数据的速度和数据处理的速度不一定同步,因此添加一个消息中间件来作为缓冲,建议选用Kafka来实现。

  • 流式计算模块:对采集到的数据进行实时分析,建议选用Storm来实现。

  • 数据输出模块:对分析后的结果持久化,可以使用HDFS、MySQL等。

日志采集选型

大数据平台每天会产生大量的日志,处理这些日志需要特定的日志系统。目前常用的开源日志系统有 Flume 和Kafka两种, 都是非常优秀的日志系统,且各有特点。下面我们来逐一认识一下。

Flume组件特点

Flume是一个分布式、可靠、高可用的海量日志采集、聚合和传输的日志收集系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

Flume的设计目标

  • 可靠性

Flume的核心是把数据从数据源收集过来,再送到目的地。为了保证输送一定成功,在送到目的地之前,会先缓存数据,待数据真正到达目的地后,删除自己缓存的数据。Flume 使用事务性的方式保证传送Event整个过程的可靠性。

  • 可扩展性

Flume中只有一个角色Agent,其中包含Source、Sink、Channel三种组件。一个Agent的Sink可以输出到另一个Agent的Source。这样通过配置可以实现多个层次的流配置。

  • 功能可扩展性

Flume自带丰富的Source、Sink、Channel实现。用户也可以根据需要添加自定义的组件实现, 并在配置中使用起来。

Flume的架构

Flume的基本架构是Agent。它是一个完整的数据收集工具,含有三个核心组件,分别是 Source、Channel、Sink。数据以Event为基本单位经过Source、Channel、Sink,从外部数据源来,向外部的目的地去。

除了单Agent的架构外,还可以将多个Agent组合起来形成多层的数据流架构:

  • 多个Agent顺序连接:将多个Agent顺序连接起来,将最初的数据源经过收集,存储到最终的存储系统中。一般情况下,应该控制这种顺序连接的Agent的数量,因为数据流经的路径变长了,如果不考虑Failover的话,出现故障将影响整个Flow上的Agent收集服务。

  • 多个Agent的数据汇聚到同一个Agent:这种情况应用的场景比较多,适用于数据源分散的分布式系统中数据流汇总。

  • 多路(Multiplexing)Agent:多路模式一般有两种实现方式,一种是用来复制,另一种是用来分流。复制方式可以将最前端的数据源复制多份,分别传递到多个Channel中,每个Channel接收到的数据都是相同的。分流方式,Selector可以根据Header的值来确定数据传递到哪一个Channel。

  • 实现Load Balance功能:Channel中Event可以均衡到对应的多个Sink组件上,而每个Sink组件再分别连接到一个独立的Agent上,这样可以实现负载均衡。

Kafka组件特点

kafka实际上是一个消息发布订阅系统。Producer向某个Topic发布消息,而Consumer订阅某个Topic的消息。一旦有新的关于某个Topic的消息,Broker会传递给订阅它的所有Consumer。

Kafka的设计目标

  • 数据在磁盘上的存取代价为O(1)

Kafka以Topic来进行消息管理,每个Topic包含多个Partition,每个Partition对应一个逻辑log,由多个Segment组成。每个Segment中存储多条消息。消息id由其逻辑位置决定,即从消息id可直接定位到消息的存储位置,避免id到位置的额外映射。

  • 为发布和订阅提供高吞吐量

Kafka每秒可以生产约25万消息(50 MB),每秒处理55万消息(110 MB)。

  • 分布式系统,易于向外扩展

所有的Producer、Broker和Consumer都会有多个,均为分布式的。无需停机即可扩展机器。

Kafka的架构

Kafka是一个分布式的、可分区的、可复制的消息系统,维护消息队列。

Kafka的整体架构非常简单,是显式分布式架构,Producer、Broker和Consumer都可以有多个。Producer,consumer实现Kafka注册的接口,数据从Producer发送到Broker,Broker承担一个中间缓存和分发的作用。Broker分发注册到系统中的Consumer。Broker的作用类似于缓存,即活跃的数据和离线处理系统之间的缓存。客户端和服务器端的通信,是基于简单、高性能、且与编程语言无关的TCP协议。

Flume与Kafka的比较

Flume和Kafka都是优秀的日志系统,其都能实现数据采集、数据传输、负载均衡、容错等一系列的需求, 但是两者之间还是有着一定的差别。

由此可见Flume和Kafka还是各有特点的:

  • Flume 适用于没有编程的配置解决方案,由于提供了丰富的source、channel、sink实现,各种数据源的引入只是配置变更就可实现。

  • Kafka 适用于对数据管道的吞吐量、可用性要求都很高的解决方案,基本需要编程实现数据的生产和消费。

日志采集选型小结

建议采用Flume作为数据的生产者,这样可以不用编程就实现数据源的引入,并采用Kafka Sink作为数据的消费者,这样可以得到较高的吞吐量和可靠性。如果对数据的可靠性要求高的话,可以采用Kafka Channel来作为Flume的Channel使用。

Flume对接Kafka

Flume作为消息的生产者,将生产的消息数据(日志数据、业务请求数据等)通过Kafka Sink发布到Kafka中。

对接配置

对接示例

假设现有Flume实时读取/data1/logs/component_role.log的数据并导入到Kafka的mytopic主题中。环境预设为:

Zookeeper 的地址为 zdh100:2181 zdh101:2181 zdh102:2181 Kafka broker的地址为 zdh100:9092 zdh101:9092 zdh102:9093

配置Flume agent,如下修改Flume配置:

gent1.sources = logsrc
agent1.channels = memcnl
agent1.sinks = kafkasink#source p
agent1.sources.logsrc.type = exec
agent1.sources.logsrc.command = tail -F /data1/logs/component_role.log
agent1.sources.logsrc.shell = /bin/sh -c
agent1.sources.logsrc.batchSize = 50
agent1.sources.logsrc.channels = memcnl# Each sink's type must be defined
agent1.sinks.kafkasink.type = org.apache.flume.sink.kafka.KafkaSink
agent1.sinks.kafkasink.brokerList=zdh100:9092, zdh101:9092,zdh102:9092
agent1.sinks.kafkasink.topic=mytopic
agent1.sinks.kafkasink.requiredAcks = 1
agent1.sinks.kafkasink.batchSize = 20
agent1.sinks.kafkasink.channel = memcnl# Each channel's type is defined.
agent1.channels.memcnl.type = memory
agent1.channels.memcnl.capacity = 1000

启动该Flume节点:

/home/mr/flume/bin/flume-ng agent -c
/home/mr/flume/conf -f /home/mr/flume/conf/flume-conf.properties -n agent1 -Dflume.monitoring.type=http -Dflume.monitoring.port=10100

动态追加日志数据,执行命令向 /data1/logs/component_role.log 添加数据:

echo "测试代码" >> /data1/logs/component_role.log
echo "检测Flume+Kafka数据管道通畅" >> /data1/logs/component_role.log

验证Kafka数据接收结果,执行命令检查Kafka收到的数据是否正确,应该可以呈现刚才追加的数据:

/home/mr/kafka/bin/kafka-console-consumer.sh --zookeeper zdh100:2181 --topic mytopic --from-beginning

输出结果如下:

版权声明:

本文为大数据技术与架构整理,原作者独家授权。未经原作者允许转载追究侵权责任。

编辑|duDu丶

微信公众号|import_bigdata

欢迎点赞+收藏+转发朋友圈素质三连

文章不错?点个【在看】吧! ????

Flume+Kafka双剑合璧玩转大数据平台日志采集相关推荐

  1. Kafka集群在马蜂窝大数据平台的优化与应用扩展

    导读 Kafka 是当下热门的消息队列中间件,它可以实时地处理海量数据,具备高吞吐.低延时等特性及可靠的消息异步传递机制,可以很好地解决不同系统间数据的交流和传递问题. Kafka 在马蜂窝也有非常广 ...

  2. Kafka 集群在马蜂窝大数据平台的优化与应用扩展

    Kafka 是当下热门的消息队列中间件,它可以实时地处理海量数据,具备高吞吐.低延时等特性及可靠的消息异步传递机制,可以很好地解决不同系统间数据的交流和传递问题. Kafka 在马蜂窝也有非常广泛的应 ...

  3. 大数据平台日志存储分析系统解决方案

    大数据平台日志存储分析系统是在大数据平台下,针对业务系统产生的日志记录进行存储和分析.日志数据来自ElasticSearch存储的日志历史数据,并将需要存储和分析的日志数据从ElasticSearch ...

  4. 百分点“数据隧道”玩转大数据平台实时数据复制

    实时数据复制技术在银行.电信.保险.政务和电商等领域应用非常广泛. 比如银行领域的收单业务涉及收单行.银行卡组织及发卡行的数据同步.收单行的数据需要传输到银行卡组织,再由银行卡组织传输给发卡行. 如果 ...

  5. HBase项目实战:HBase+Flume+Kafka+Hive+SSM实现电信大数据通话信息实时读写定位系统

    内容简介 一.项目内容深度分析 1. 项目内容概览 2.数据的大致流向分析 3. 涉及的知识难点分析 二.项目所用到的框架清单 三.项目实战代码 1. 后端开发 1. 构建工程项目模块 2.开发通话记 ...

  6. kafka 可视化工具_Kafka集群在马蜂窝大数据平台的优化与应用扩展

    Kafka 是当下热门的消息队列中间件,它可以实时地处理海量数据,具备高吞吐.低延时等特性及可靠的消息异步传递机制,可以很好地解决不同系统间数据的交流和传递问题. Kafka 在马蜂窝也有非常广泛的应 ...

  7. 搭建TDH商业大数据平台社区版(附其他主流商业大数据平台下载汇总)

    大数据核心原理与实践专栏 说明: TDH社区版还挺好用的,无限量续签许可证,如果大家只是想玩玩儿大数据平台,或者刚入行大数据想练手,那么TDH社区版就够用了,避免了你前期安装一系列Hadoop组件的麻 ...

  8. 【Hadoop大数据平台组件搭建系列(一)】——Zookeeper组件配置

    简介 本篇介绍Hadoop大数据平台组件中的Zookeeper组件的搭建 使用软件版本信息 zookeeper-3.4.14.tar.gz Zookeeper安装 解压Zookeeper安装包至目标目 ...

  9. 开源大数据平台的安全实践

    开源大数据平台的安全实践 刘杰 百度(中国)有限公司,北京 100085 摘要:开源大数据平台的安全机制目前并不特别完善,特别是用户认证.日志审计等方案还存在不少问题.分析了开源大数据平台存在的安全隐 ...

最新文章

  1. 腾讯云python环境_腾讯云centos6.5 搭建python机器学习环境
  2. 机器学习算法加强——提升
  3. 自我总结和学习表单提交的几种方式 (一)
  4. Windows10电脑系统时间校准
  5. Swiper学习之三---swiper的配置选项 ②:Free模式和Effects切换效果
  6. node ,express框架后台设置跨域操作,路由中间件
  7. 电机与拖动基础第四版_伺服电机控制
  8. jpeglib的jpeg_finish_compress函数疑似越界
  9. Bug heroes虫虫英雄 超详细翻译+基本攻略
  10. 【自用】图像算法、计算机视觉面试问题及答案1.0
  11. 新型自动站业务用计算机采用,探析新型自动气象站测报业务软件运行故障及解决对策...
  12. ubuntu卡在无限循环登录界面,进不去桌面的问题#不重装是我们最后的倔强!#
  13. Echart自适应图表大小和字体大小
  14. 再见 Xshell,这个开源的终端工具更酷炫。
  15. 微信小程序实现轮播图(超简单)
  16. 网络摄像头工作原理_好,更好,最好以预算创建最终的远程工作者网络摄像头设置
  17. python爬虫(1)-百度新闻首页抓取
  18. Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: “:“ “:“
  19. 科学-建筑学-建筑美学:建筑美学百科
  20. 华为荣耀9i手机计算机没在桌面上,是否可以在华为手机上工作?带您看看荣耀9i...

热门文章

  1. c++实现磨砂玻璃(类似马赛克)效果
  2. Failed to open \EFI\BOOT\mmx64.efi问题解决
  3. 职场中14个坏习惯可能让你丢掉工作
  4. 易学难精的Python入门之前应该了解哪一些~
  5. 2022年南京Java培训机构排名,实力突出遥遥领先
  6. 指尖江湖李忘生鸿蒙初开,剑网3指尖江湖李忘生怎么样_李忘生装备搭配、技能特性、解锁方法介绍_游戏吧...
  7. 【PL/SQL】Insert/ update/ delete/ merge
  8. 主动降噪开发之四——多通道算法实现
  9. 微型计算机的性能主要取决于什么,微型计算机的性能主要取决于什么?
  10. PHP移动互联网开发笔记(1)——环境搭建及配置