摘要
为了完成数据实时ETL功能,项目使用kafka进行接收,spark进行实时计算,再通过kafka输出。在零基础入门的过程中,顺带解决了几个版本相关的问题:1)低版本spark和kafka使用structure streaming的问题;2)低版本spark无法向kafka写入数据的问题。因此,文章将分位如下几个部分。首先,是整理了kafka和spark的0基础入门相关问题。然后,梳理了kafka,spark和hadoop不同版本之间的关系。最后,介绍了工作过程中遇到的难点和解决问题的方法。
零基础入门
什么是kafka,为什么要用kafka
个人理解,kafka就是一个带管道的数据池,数据生成方(在kafka中被称为producer)通过一种颜色的管道(在kafka中被称为链路)向池子里灌数,数据使用方(在kafka中被称为consumer,数据消费)通过另一条相同颜色的管道消费数据。在这种机制下,不同的生产者使用不同管道向同一个大池子灌数,不同的消费者只要找同种颜色的管道就可以消费他关心的数据。这里的颜色就是topic,可以理解为加密双方约定的公钥。当然,实际项目中单条链路肯定是有多个topic,每个topic下也会通过offset管理历史数据,这就是后话了。
那么为什么要用kafka呢?因为SqlServer之类的传统关系型数据库,无法支撑大规模数据在短时间内(实时)完成高频的获取,存储,加工和输出的工作。当然,更重要的理由是,在kafka大规模应用的今天,很多数据就是kafka传过来的,不用不行。。。
什么是spark,为什么要用spark,如何学习spark
kafka解决的是数据的传输问题,但是在数据输入和输出之间的加工计算工作,则需要spark来完成。spark就是个计算器,输入1+1,spark返回2,听起来好像很蠢,但是当数据规模很大,尤其是数据实时输入的时候,spark就不可或缺了。spa