RDD是Spark最核心的数据抽象,全称叫Resilient Distributed Datasets(弹性分布式数据集)。org.apache.spark.rdd.RDD
是一个抽象类,定义了RDD的基本操作和属性
1 | // 计算某个分区的数据,返回Iterator |
leave me alone i know what to do
RDD是Spark最核心的数据抽象,全称叫Resilient Distributed Datasets(弹性分布式数据集)。org.apache.spark.rdd.RDD
是一个抽象类,定义了RDD的基本操作和属性
1 | // 计算某个分区的数据,返回Iterator |
Kafka Connect 是一个可扩展、可靠的在 Kafka 和其他系统之间流传输的数据工具。它可以通过 Connectors (连接器)简单、快速的将大集合数据导入和导出 Kafka,数据的导入导出可能有以下几种选择:
Kafka Connect可以将完整的数据库注入到Kafka的Topic中,或者将服务器的系统监控指标注入到Kafka,然后像正常的Kafka流处理机制一样进行数据流处理。
使用Kafka客户端API,是需要在应用程序里面进行开发的,可以根据不同的需求进行数据的操作;而如果需要Kafka连接数据存储系统,则使用例如Connect这种可插拔式的连接器,就会很方便,因为不需要修改系统代码。
消费者读取过程
创建消费者对象 -> 订阅主题 -> 读取消息 -> 验证消息 -> 保存消息
Kafka消费者从属于消费者群组。一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息。消费者加入群组或者由于关闭或崩溃导致消费者离开群组时候,分区的所有权需要从一个消费者转移到另一个消费者,这样的行为被称为再均衡
群组协调器
对于每一个消费者组,都会从所有的broker中选取一个作为消费者组协调器(group coordinator),负责维护和管理这个消费者组的状态,它的主要工作是当一个consumer加入、一个consumer离开(挂掉或者手动停止等)或者topic的partition改变时重新进行partition分配(再均衡)
提交:更新分区当前读取位置的操作叫做提交
偏移量:消息在分区中的位置,决定了消费者下次开始读取消息的位置
如果提交偏移量小于当前处理的消息位置,则两个之间的消息会被再次处理;
如果提交偏移量大于当前处理的消息位置,则两个之间的消息会丢失。
参考Kafka 源码解析之 Producer 发送模型(一)
下面的代码是一个简单的生产者向Kafka中发送消息的例子:
1 | import org.apache.kafka.clients.producer.KafkaProducer; |
Kafka提供了生产者API,使用时候需要实例化KafkaProducer,然后调用send方法发送数据。
下面的流程图展示了消息的发送流程
首先创建一个ProducerRecord
对象,包含了目标主题和要发送的内容。然后数据被发送给序列化器
,将键和值对象序列化成字节数据。然后数据发送给分区器
,如果ProducerRecord里面指定了分区,分区器不做任何操作,否则根据ProducerRecord对象的键来选择一个分区。然后上面的记录被追加到一个记录批次
里面,有一个独立的线程将记录批次发送到相应的broker上。
在数据仓库实际构建过程中,往往都是快猛糙地直接接入业务系统,订制ETL开发,然后简单进行维度建模,满足业务方的报表分析需求,到这里就建立了数据仓库1.0版本。但是这时候的数据仓库很脆弱,业务方的任何需求变更、以及任何环节的数据质量问题,都会导致整个流程发生剧烈的变动,这时候就需要进行数据分层。数据分层的好处如下: