Claus's Tech Blog

leave me alone i know what to do


  • 首页

  • 分类

  • 归档

  • 标签

  • 搜索

RDD API 实操

发表于 2018-08-15 | 更新于 2018-08-17 | 分类于 Big Data , Spark | 阅读次数
| 字数统计 2,670 字

RDD是Spark最核心的数据抽象,全称叫Resilient Distributed Datasets(弹性分布式数据集)。org.apache.spark.rdd.RDD是一个抽象类,定义了RDD的基本操作和属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 计算某个分区的数据,返回Iterator
def compute(split: Partition, context: TaskContext): Iterator[T]

// 获取RDD的分区列表
protected def getPartitions: Array[Partition]

// 获取RDD的依赖列表
protected def getDependencies: Seq[Dependency[_]] = deps

// 获取某一个分区数据所在的机器
protected def getPreferredLocations(split: Partition): Seq[String] = Nil

// 分区器
@transient val partitioner: Option[Partitioner] = None
阅读全文 »

Kafka Connect进行数据同步

发表于 2018-07-31 | 更新于 2018-08-01 | 分类于 Big Data , Kafka | 阅读次数
| 字数统计 1,908 字

Kafka Connect 是一个可扩展、可靠的在 Kafka 和其他系统之间流传输的数据工具。它可以通过 Connectors (连接器)简单、快速的将大集合数据导入和导出 Kafka,数据的导入导出可能有以下几种选择:

  • flume
  • kafka connector
  • kafka 生产者/消费者API
  • 商业ETL工具

Kafka Connect可以将完整的数据库注入到Kafka的Topic中,或者将服务器的系统监控指标注入到Kafka,然后像正常的Kafka流处理机制一样进行数据流处理。

使用Kafka客户端API,是需要在应用程序里面进行开发的,可以根据不同的需求进行数据的操作;而如果需要Kafka连接数据存储系统,则使用例如Connect这种可插拔式的连接器,就会很方便,因为不需要修改系统代码。

阅读全文 »

Kafka消费者基础使用

发表于 2018-07-25 | 更新于 2018-07-27 | 分类于 Big Data , Kafka | 阅读次数
| 字数统计 1,576 字

Kafka消费者相关概念

消费者与消费者组

消费者读取过程

创建消费者对象 -> 订阅主题 -> 读取消息 -> 验证消息 -> 保存消息

Kafka消费者从属于消费者群组。一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息。消费者加入群组或者由于关闭或崩溃导致消费者离开群组时候,分区的所有权需要从一个消费者转移到另一个消费者,这样的行为被称为再均衡

群组协调器

对于每一个消费者组,都会从所有的broker中选取一个作为消费者组协调器(group coordinator),负责维护和管理这个消费者组的状态,它的主要工作是当一个consumer加入、一个consumer离开(挂掉或者手动停止等)或者topic的partition改变时重新进行partition分配(再均衡)

Offset偏移量管理

提交:更新分区当前读取位置的操作叫做提交

偏移量:消息在分区中的位置,决定了消费者下次开始读取消息的位置

如果提交偏移量小于当前处理的消息位置,则两个之间的消息会被再次处理;

LastCommitedOffsetSmallerThanCurrent

如果提交偏移量大于当前处理的消息位置,则两个之间的消息会丢失。

LastCommitedOffsetLargetThanCurrent

阅读全文 »

(转)Kafka生产者发送消息流程

发表于 2018-07-24 | 更新于 2018-07-24 | 分类于 Big Data , Kafka | 阅读次数
| 字数统计 2,944 字

参考Kafka 源码解析之 Producer 发送模型(一)

一个简单的生产者

下面的代码是一个简单的生产者向Kafka中发送消息的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;

import java.util.Properties;

public class SimpleProducer {

public static void main(String[] args){
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

Producer<String, String> producer = new KafkaProducer<>(props);
for (int i = 0; i < 10; i++){
String msg = "This is message " + i;
ProducerRecord<String, String> pr = new ProducerRecord<>("testTopic", msg);
producer.send(pr);
}
producer.close();
}
}

Kafka提供了生产者API,使用时候需要实例化KafkaProducer,然后调用send方法发送数据。

生产者数据发送流程

下面的流程图展示了消息的发送流程

producer send message procedure

首先创建一个ProducerRecord对象,包含了目标主题和要发送的内容。然后数据被发送给序列化器,将键和值对象序列化成字节数据。然后数据发送给分区器,如果ProducerRecord里面指定了分区,分区器不做任何操作,否则根据ProducerRecord对象的键来选择一个分区。然后上面的记录被追加到一个记录批次里面,有一个独立的线程将记录批次发送到相应的broker上。

阅读全文 »

数据仓库分层

发表于 2018-06-07 | 更新于 2018-06-08 | 阅读次数
| 字数统计 918 字

在数据仓库实际构建过程中,往往都是快猛糙地直接接入业务系统,订制ETL开发,然后简单进行维度建模,满足业务方的报表分析需求,到这里就建立了数据仓库1.0版本。但是这时候的数据仓库很脆弱,业务方的任何需求变更、以及任何环节的数据质量问题,都会导致整个流程发生剧烈的变动,这时候就需要进行数据分层。数据分层的好处如下:

  1. 清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。
  2. 数据血缘追踪:简单来讲可以这样理解,我们最终给业务诚信的是一能直接使用的张业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。
  3. 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。
  4. 把复杂问题简单化。讲一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
  5. 屏蔽原始数据的异常。
  6. 屏蔽业务的影响,不必改一次业务就需要重新接入数据。
阅读全文 »
123…15
Shuo Lv

Shuo Lv

72 日志
15 分类
50 标签
GitHub Weibo 知乎 LinkedIn Facebook
友情链接
  • 公式编辑器
  • 可视化Python代码
  • Python最佳实践
© 2015 - 2018 Shuo Lv
由 Hexo 强力驱动
主题 - NexT.Pisces