使用Flume-KafkaSource实时采集avro格式数据

本文介绍了如何使用Flume-KafkaSource实时采集Avro格式的数据,并面临了序列化、反序列化的挑战。尝试了通过Hive外部表、API读取和KafkaConsumer参数设置等方式,最终通过自定义Source解决,将KafkaConsumer返回的record类型转换为JSON,成功实现了Avro数据的反序列化和存储。
摘要由CSDN通过智能技术生成

业务描述:

最近项目中需要实时采集业务数据库CDC数据(这里数据已被序列化为avro格式数据),这里技术架构我们采用了Flume+Hdfs。

了解Flume的朋友都知道它的组件分为三部分:source,channel,sink。具体原理部分这里就不再赘述,可查看官网或flume技术博客,这里具体讲一下实现流程及添坑之路。

业务过来的数据放在在kafka里,所以source端采用的是kafkaSource,说白了就是kafkaConsumer,sink选用的是hdfsSink,channel这里选的是file type。

hdfsSink写入文件格式有两种一是:Text File,二是Sequence File,不管选用哪种文件格式落地到hdfs后都不能直接使用,前面说到了业务数据已被序列化为avro格式,但需求是hdfs上的数据必须是直接可用的。

考虑了几种解决方式:

1,使用hive创建外部表关联hdfs上的数据,这里就有问题了,虽然hive支持读取seq文件格式,但我们这里seq文件里(hdfsSink使用Sequence File格式存储)的数据是avro的格式,我试着建表查询了一下,结果是乱码,text File也一样,这种方式就pass掉了。其实hive可以直接读取avro格式数据指定数据的sc

Flume 是一个分布式的、可靠的、高可用的海量日志采集、聚合和传输的系统,它可以帮助我们快速地将大量的日志数据从不同的源头采集到 Hadoop 生态系统中。其中,Avro 是一种数据交换格式,它支持动态的数据类型定义,数据压缩和二进制编码,使得数据传输更加高效和灵活。下面是使用 Avro 数据源测试 Flume 的实验原理: 1. 准备环境:安装 JDK、FlumeAvro 工具包,并在本地或者远程服务器上启动 Flume 的 Agent。 2. 配置 Flume Agent:在 Flume Agent 的配置文件中,设置 Avro Source 和其他必要的组件,如 Channel 和 Sink。同时,指定数据源的 IP 地址和端口号,以便 Flume Agent 可以从该数据源中获取数据。 3. 启动 Avro 数据源:使用 Avro 工具包中的命令行工具,启动 Avro 数据源,并将其绑定到指定的 IP 地址和端口号上。此时,Avro 数据源会监听这个端口,并等待 Flume Agent 的连接请求。 4. 模拟数据生成:使用自定义的 Python 脚本或其他工具,模拟数据生成并发送到 Avro 数据源的监听端口。这些数据可以是结构化的、半结构化的或非结构化的,如 JSON、XML、CSV 和文本等格式。 5. 数据采集和传输:Flume Agent 会从 Avro 数据源中获取数据,并将其写入到指定的 Channel 中。同时,Flume Agent 会根据配置文件中定义的 Sink,将数据传输到指定的目的地,如 HDFSKafka 和 Elasticsearch 等。 6. 数据处理和分析:在数据传输完成后,我们可以使用 Hive、Spark、Pig 和 Impala 等工具,对数据进行处理、分析和可视化。这些工具可以帮助我们深入了解数据的特征和规律,为业务决策提供有力的支持。 总之,使用 Avro 数据源测试 Flume 的实验原理是基于 Flume 的强大功能和 Avro 的高效性能,实现数据的快速、准确和可靠的采集和传输,为大数据应用的开发和部署提供了有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值