前言近年来,随着社会服务信息化的快速发展,互联网、物联网、金融、物流、电磁等方面的数据呈现指数级增长。大数据的传输是大数据处理基本过程的重要组成部分。高性能的数据传输可以为后续的数据分析,尤其是实时分析提供保障。本文简要介绍了主流的大数据传输方式和多源异构数据传输的设计方案,供大家参考。一、大数据传输背景从2003年开始,谷歌先后发表了GoogleFS、MapReduce、BigTable三个系统(框架)的论文,阐述了这三个产品的详细设计方法,为后来的全球大数据发展奠定了基础.基础。由于数据量和效率的问题,传统的单机存储和计算已经不适应时代的发展,多节点分布式存储逐渐取而代之。这种方法可以在多个廉价节点上同时存储和并行计算,并提供很好的容错能力。随着大数据技术的不断发展,更多的高性能处理框架走上了历史舞台,形成了大数据生态。比如分布式存储有HDFS、Hbase、Hive等,分布式计算有MapReduce、Spark、Storm等,作为这个生态系统的重要组成部分,数据传输模块必不可少。现在流行的有Kafka、Logstash、Sqoop等。在数据传输过程中,无论是离线数据传输如将文件导入数据库,还是实时传输如将实时采集的数据传输到数据库中进行计算,我们都希望有高速度和高质量传输效率。同时,也要求数据传输达到良好的安全性、稳定性和可靠性。另一方面,对于实时性要求高的,比如金融股票、数据可视化等,需要获得快速的响应,传入数据仓库的入库可能会有一定的延迟。基于最基本的用户需求,大数据传输机制应遵循以下原则:(1)模型安全。大数据计算一般由几十个甚至上百个节点组成。在获取数据时,节点与数据源之间、节点与节点之间都会有较大的I/O使用率。数据传输必须满足必要的安全性。对于保密性要求高的数据,必须建立完善的数据保护措施,防止数据泄露。(2)传输可靠性。随着计算存储设备和数据传输通道的不断升级,数据传输的速度和效率也逐渐提高。在获取数据源时,数据管道必须提供可靠的传输,以实现至少一种交付保证。(3)网络适应性。用户和分析设备可以根据自己的需要适配数据传输服务,最大限度地对接数据格式,达到良好的对接效果。2、主流的传输方式目前在大数据的广泛应用中,Kafka、Logstash、Sqoop等都是传输数据的重要方式。这里简单介绍一下传输原理。2.1KafkaKafka最初是由Linkedin开发的。它是一个分布式的、分区的、多副本、多订阅者、基于zookeeper协调的分布式日志系统。可普遍用于web/nginx日志、访问日志、消息服务等。Linkedin于2010年将该系统贡献给Apache基金会,成为顶级开源项目。Kafka的主要设计特点如下:提供时间复杂度为O(1)的消息持久化能力,即使是TB级以上的数据也能保证恒时访问性能。高吞吐量。即使在非常便宜的商用机器上,单台机器也可以支持每秒传输100K条消息。支持KafkaServer之间的消息分区和分布式消费,同时保证各部分消息的顺序传输。支持离线数据处理和实时数据处理。Scaleout:支持在线水平扩展。图1Kafka的架构图1显示了一个典型的Kafka集群的架构。每个集群包含多个生产者。这些生产者可以是来自数据采集设备的硬件数据源,也可以是由服务器生成的。日志信息等;每个集群有多个服务代理(broker),每个服务代理一般安装在一个节点服务器上,kafka支持并行扩展,集群中服务代理数量越多吞吐量越高。生产者生产的数据可以写入指定的topic,消费者可以根据自己的需要从指定的topic中拉取数据。为了进一步提高数据传输的吞吐量,Kafka将每个topic分成若干部分,每个部分存储对应的数据和索引文件。创建主题时,您可以指定部分的数量。零件数量越多,系统的吞吐量越大,但也会占用更多的资源。Kafka接收到生产者发送的数据后,会按照一定的平衡策略将数据存储在某部分,等待消费者消费数据。此外,Kafka还建立了数据的副本。当数据节点发生事故时,其他副本通过一定的机制承担主体部分的角色,使系统具有高可用性。Kafka至少提供一种交付保证。生产者向节点发送数据,节点会反馈消息是否被存储。如果未收到确认消息,生产者将重复发送消息;同理,consumer消费数据发送接收反馈,节点记录消费位置,下一次消费将从该位置开始。这些机制都保证至少一次的可靠交付。在安全方面,Kafka使用SSL或SASL来验证从客户端(生产者和消费者)和其他代理和工具到代理的链接身份。在传输过程中,也可以选择对数据进行加密,客户端的读写授权,虽然可能会导致集群性能下降,但对于机密性高的数据来说,是可以接受的。2.2LogstashLogstash是一个免费开放的服务器端数据处理管道,可以从多个来源收集数据。同时,这个管道还允许你在中间添加一个过滤器,根据你的需要对数据进行转换和过滤,然后将数据发送到用户指定的数据库中。图2Logstash数据传输图3Logstash结构Logstash将数据流中的每条数据称为一个事件,处理管道由三个主要角色完成:inputs–>filters–>outputs。原始数据进入logstash后,内部不会以原始数据流的形式流动,在输入时转换成事件,在输出事件时转换成目标格式的数据。当有输入数据时,输入会从文件中取出数据,然后通过json编解码将数据转化为logstash事件。这个事件会通过队列流入一个pipeline处理线程,先存储到batcher中。当batcher达到处理数据的条件时(比如某个时间或者某个规模的事件),batcher会将数据发送给filter,filter会处理事件数据并传递给output,以及output将数据输出到指定的输出位置。输出后会向队列返回ACK,包括已处理的事件,队列会标记已处理的事件。如果Logstash节点发生故障,Logstash将确保正在运行的事件至少通过持久队列传递一次。那些没有被正常处理的消息会被送到死信队列(deadletterqueue)中做进一步的处理。由于这种吸收吞吐量的能力,Logstash可以安然度过高峰期,而无需求助于额外的排队层。此外,还可以充分保证采集管道的安全。3.多源异构数据传输设计在数据不断增长的过程中,我们往往会根据自己的需要收集不同类型的数据,存储在不同的数据库中,在使用数据时从不同的数据源读取数据进行分析和处理。这些不同的存储方式、不同的采集系统、不同的数据格式,从简单的文件数据库到复杂的网络数据库,共同构成了异构的数据源。为了统一处理数据,根据可视化等实际需要,需要通过引擎连接各种异构数据源,为数据的海量处理和展示提供更标准化的读取方式。目前针对异构数据批处理的应用有springbatch、kettle、datax等,它们各有特点:最有效地处理信息,并提供对处理大量数据至关重要的可重用功能。Kettle是一款国外开源的ETL工具,可以让你通过Spoon运行或转换任务,支持读取、操作和写入不同数据源的数据,并在指定的时间间隔内以批处理方式自动运行。Datax是一款异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定、高效的数据同步。以下是一个轻量级的ETL工具,主要功能是从不同的源获取数据,然后进行统一处理,最后写入到各个目标源。其基本特点是:基于Springboot开发,轻量级、快速、简单、入门门槛低、扩展性强,各模块独立,可以插件形式开发,通过UI界面构建和运行任务,以及整体监控平台的实时数据基于Disruptor进行缓冲,同时使用redis等内存缓存,保证高速处理任务。ETL工具将整个系统分为以下几个模块:Input、Reader、Transport、Convert、Writer和Output,这些模块已经在系统上层进行了定义,对于各个模块的接口,开发者可以根据需要定制自己的模块自己的需求,只需要继承上层接口即可实现模块的嵌入。系统运行的简化基本流程如图4所示。图4ETL工具运行简化流程这里的所有模块都有一定的标准接入系统,然后使用各个数据源提供的API读写数据,比如可以从文件、mysql、hbase读取输入,hdfs、kafka、http等,输出也支持这些数据源,最终解决了异构数据源之间的数据不兼容问题。系统设置了缓冲和读写速度的可选策略。它可以根据java调度器和当前输入输出任务的数量调整输入输出线程池和线程数,以最大化数据传输。表现。4.小结现在数据采集设备无处不在。需要一个高效、可靠、安全的数据通道,将各种格式的数据导入不同的数据仓库,并连接数据仓库之间的数据。本文在介绍大数据传输的同时,简要描述了当前主流数据传输工具的应用和个性化异构数据引擎的设计问题。本文参考了一些文献和网络资源,对他们对本文的观点和技术贡献表示感谢。参考文献[1]https://www.cnblogs.com/qingyunzong/p/9004509.html[2]https://blog.csdn.net/chenleiking/article/details/73563930[3]https://gitee.com/starblues/rope/wikis/pages?sort_id=1863419&doc_id=507971
