SQL引擎-Calcite 设计与实现
一、概述Calcite 是一个能够连接异构数据源,并优化查询计划的基础框架, 它聚焦于自身的核心功能,对于具体的数据源开放了很多接口,用户可以根据自己的需求进行选择,或者进行二次开发。
二、设计Calcite 提供查询处理所需要的四大功能:查询语言解析、语义校验、查询优化和查询执行。但是如前文所述,图2-2展示了Calcite的架构。
消息队列系列-Kafka 客户端-生产端设计-主线程-KafkaProducer
一、概述Kafka 提供了 Java 版本的生产者的实现 KafkaProducer,使用 KafkaProducer 的 API 可以轻松实现同 步/异步发送消息、批量发送、超时重发等复杂的功能,
二、设计2.1. 核心字段
PRODUCER_CLIENT_ID_SEQUENCE: clientId 的生成器,如果没有明确指定 client 的 Id,则使用字 段生成一个ID。
clientId: 此生产者的唯一标识
partitioner: 分区选择器,根据一定的策略,将消息路由到合适的分区。
maxRequestSize: 消息的最大长度,这个长度包含了消息头、序列化后的 key 和序列化后的 value 的长度。
totalMemorySize: 发送单个消息的缓冲区大小。
accumulator: RecordAccumulator,用于收集并缓存消息,等待 Sender 线程发送。
sender: 发送消息的 Sender 任务,实现了 Runnable 接口,在 ioThread 线程中执行。
ioThread: 执行 Sender 任务发 ...
消息队列系列-Kafka 客户端-生产端设计
一、架构设计整个生产者客户端由两个线程协调运行,这两个线程分别为主线程和 Sender 线程。 在主线程中由 KafkaProducer 创建消息,然后通过可能的拦截器、序列化器和分区器的作 用之后缓存到消息累加器 RecordAccumulator 中。Sender线程负责将消息信息构成请求,并最终执行网络 I/O 的线程,它从 RecordAccumulator 中 取出消息并批量发送出去。
二、主线程消息发送的过程中,主线程首先将业务数据封装成 ProducerRecord 对象,之后调用 $send()$ 方法将消息放入 RecordAccumulator。
KafkaProducer
Kafka 提供了 Java 版本的生产者的实现 KafkaProducer,使用 KafkaProducer 的 API 可以轻松实现同 步/异步发送消息、批量发送、超时重发等复杂的功能。
引用本站文章
消息队列系列-Kafka 客户端-生产端设计-主线程-Kafk ...
消息队列系列-Kafka
一、概述Kafka 起初是由 Linkedin 公司采用 Scala 语言开发的一个多分区、多副本且基于 ZooKeeper 协调的分布式消息系统,现己被捐献给 Apache 基金会。 目前 Kafka 已经定位为一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。目前越来越多的开源分布式处理系统如 Spark、 Flink 等都支持与 Kafka 集成。
二、源码学习2.1. V-0.102.1.1. 客户端
生产端
引用本站文章
消息队列系列-Kafka 客户端-生产端设计
Joker
消费端
引用本站文章
消息队列系列-Kafka 客户端-消费端设计
...
消息队列系列
一、概述消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件。常见的主流消息队列有 ActiveMQ、RabbitMQ、Kafka、RocketMQ、Pulsar 等。
二、实现2.1. KafkaKafka 起初是由 Linkedin 公司采用 Scala 语言开发的一个多分区、多副本且基于 ZooKeeper 协调的分布式消息系统,现己被捐献给 Apache 基金会。 目前 Kafka 已经定位为一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。目前越来越多的开源分布式处理系统如 Spark、 Flink 等都支持与 Kafka 集成。
引用本站文章
消息队列系列-Kafka
Joker
2.2. PulsarApache Pulsar 是下一代云原生分布式消息流平台 ...
Hadoop-系列
一、概述Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构,主要解决,海量数据的存储和海量数据的分析计算问题。
二、核心组件Hadoop 的核心组件是 HDFS,MapReduce 以及 YARN。
2.1. HDFSHDFS 是 Hadoop 分布式文件系统,是指提供对应用程序数据的高吞吐量访问的分布式文件系统。
正在持续施工中ing~~~
引用本站文章
Hadoop-组件-HDFS 系列
Joker
2.2. YarnYarn 是作业调度和集群资源管理的框架。
正在施工中ing~~~
引用本站文章
Hadoop-组件-Yarn 系列
Joker
...
Spark 系列
一、概述Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是 加州大学伯克利分校的 AMP 实验室开源的类 Hadoop MapReduce 的通用并行框架。
二、理论笔记
引用本站文章
Spark-理论笔记系列
Joker
三、源码学习
引用本站文章
Spark-源码学习系列
Joker
四、大厂分享
引用本站文章
Spark-发展-大厂分享系列
...
Spark-源码学习-SparkCore-节点退役
一、概述Spark 节点退役特性包括元数据操作(如将 Worker 从可调度资源列表中排除)以及数据迁移(Shuffle 文件和 RDD 块迁移)https://www.waitingforcode.com/apache-spark/what-new-apache-spark-3.1-nodes-decommissioning/read
二、元数据操作三、数据迁移数据迁移入口: $CoarseGrainedExecutorBackend.decommissionSelf()$ 方法中。
首先,该方法会验证节点退役功能是否已启用,即 spask.decommission.enabled 的值是否为 true。此时,执行器还会检查它是否尚未运行退役进程。如果是,则在此阶段不会继续执行退役进程,而是让已启动的进程终止。
12345if (!env.conf.get(DECOMMISSION_ENABLED)) { return} else if (decommissioned) { return}
经过这两次检查后,执行器会将自己标记为退役 ...
Spark-源码学习-SparkSession-Extensions
一、概述Spark SQL Extensions 提供了一种灵活的机制,使得 Spark 用户可以在 SQL 解析的 Parser、Analyzer、Optimizer 以及 Planner 等阶段进行自定义扩展,包括自定义 SQL 语法解析、新增数据源等等。
二、设计SparkSessionExtensions 保存了用户自定义的扩展规则,包含以下方法:
• $buildResolutionRules$ 构建扩展规则添加到 Analyzer 的 resolution 阶段
• $injectResolutionRule$ 向 Analyzer 的 resolution 阶段注册扩展规则生成器
• buildPostHocResolutionRules:构建扩展规则添加到 Analyzer 的 post-hoc resolution 阶段
• injectPostHocResolutionRule:向 Analyzer 的 post-hoc resolution 阶段注册扩展规则生成器
• buildCheckRules:构建扩展检查规则,该规则将会在 analysis 阶段之后运 ...
Flink-源码学习-API-Catalog 体系
一、概述数据处理最关键的方面之一是管理元数据。元数据可以是临时的,如临时表、或者通过 TableEnvironment 注册的 UDF。元数据也可以是持久化的,例如 HiveMetastore 中的元数据。Catalog 提供了一个统一的 API,用于管理元数据,如数据库、表、分区、视图以及数据库或其他外部系统中存储的函数和信息,并使其可以从 Table API 和 SQL 查询语句中来访问。
二、元数据 Catalog API 设计Catalog 在 Flink 中提供了一个统一的 API,用于管理元数据,Catalog 提供了元数据信息,例如数据库、表、分区、视图以及数据库或其他外部系统中存储的函数和信息。
2.1. 元数据模型Flink 的元数据模型定义了任务的元数据结构,如数据库、表、视图、函数等,Flink 定义了 4 类接口分别对应于 4 种元数据类型,元数据类型之间的层次关系如图,最顶层的 Catalog 是元数据的容器。
2.1.1. 数据库数据库等同于数据库中的库实例,接口定义为 CatalogDatabase,定义数据库实例的元数据,一个数据库实例中包含表、 ...