Apache Avro

实战 | MySQL Binlog通过Canal同步HDFS

[亡魂溺海] 提交于 2021-02-19 04:02:42
大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! 之前 《MySQL Binlog同步HDFS的方案》 介绍性的文章简单介绍了实时同步mysql到hdfs的几种方案,本篇主要记录下利用canal同步mysql到hdfs的具体方案。 本文来自:http://bigdatadecode.club/MysqlToHDFSWithCanal.html canal server 部署 在canal中一个mysql实例对应一个配置文件,配置文件放在conf目录下的一个文件夹中,该文件夹的名字就代表了mysql实例。结构如下 -rwxr-xr-x 1 dc user 2645 Jul 18 14:25 canal.properties -rwxr-xr-x 1 dc user 2521 Jul 17 18:31 canal.properties.bak -rwxr-xr-x 1 dc user 3045 Jul 17 18:31 logback.xml drwxr-xr-x 2 dc user 4096 Jul 17 18:38 spring drwxr-xr-x 2 dc user 4096 Jul 19 11:55 trans1 trans1代表一个mysql实例,该文件夹中有个instance.properties文件

clickhouse config.xml

这一生的挚爱 提交于 2021-02-05 00:30:37
1. builtin_dictionaries_reload_interval: 重新加载内置词典的时间间隔(以秒为单位),默认3600。可以在不重新启动服务器的情况下“即时”修改词典。 < builtin_dictionaries_reload_interval > 3600 </ builtin_dictionaries_reload_interval > 2. compression: MergeTree引擎表的数据压缩设置。配置模板如: < compression incl ="clickhouse_compression" > --指定incl < case > < min_part_size > 10000000000 </ min_part_size > --数据部分的最小大小 < min_part_size_ratio > 0.01 </ min_part_size_ratio > --数据部分大小与表大小的比率 < method > zstd </ method > --压缩算法,zstd和lz4 </ case > </ compression > 可以配置多个<case>。如果数据部分与条件集匹配,使用指定的压缩方法;如果数据部分匹配多个条件集,将使用第一个匹配的条件集;如果数据部分不满足任何条件,则使用lz4压缩。 3. default_database

Netty面试题(2020最新版)

扶醉桌前 提交于 2021-01-05 01:18:27
1.Netty 是什么? Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty是基于nio的,它封装了jdk的nio,让我们使用起来更加方法灵活。 2.Netty 的特点是什么? 高并发:Netty 是一款基于 NIO(Nonblocking IO,非阻塞IO)开发的网络通信框架,对比于 BIO(Blocking I/O,阻塞IO),他的并发性能得到了很大提高。 传输快:Netty 的传输依赖于零拷贝特性,尽量减少不必要的内存拷贝,实现了更高效率的传输。 封装好:Netty 封装了 NIO 操作的很多细节,提供了易于使用调用接口。 3.Netty 的优势有哪些? 使用简单:封装了 NIO 的很多细节,使用更简单。 功能强大:预置了多种编解码功能,支持多种主流协议。 定制能力强:可以通过 ChannelHandler 对通信框架进行灵活地扩展。 性能高:通过与其他业界主流的 NIO 框架对比,Netty 的综合性能最优。 稳定:Netty 修复了已经发现的所有 NIO 的 bug,让开发人员可以专注于业务本身。 社区活跃:Netty 是活跃的开源项目,版本迭代周期短,bug 修复速度快。 4.Netty 的应用场景有哪些? 典型的应用有:阿里分布式服务框架 Dubbo,默认使用 Netty 作为基础通信组件,还有 RocketMQ

基于 Kafka 与 Debezium 构建实时数据同步

烂漫一生 提交于 2020-12-13 12:43:12
起源 在进行架构转型与分库分表之前,我们一直采用非常典型的单体应用架构:主服务是一个 Java WebApp,使用 Nginx 并选择 Session Sticky 分发策略做负载均衡和会话保持;背后是一个 MySQL 主实例,接了若干 Slave 做读写分离。在整个转型开始之前,我们就知道这会是一块难啃的硬骨头:我们要在全线业务飞速地扩张迭代的同时完成架构转型,因为这是实实在在的”给高速行驶的汽车换轮胎”。 为了最大限度地减少服务拆分与分库分表给业务带来的影响(不影响业务开发也是架构转型的前提),我们采用了一种温和的渐进式拆分方案: 对于每块需要拆分的领域,首先拆分出子服务,并将所有该领域的数据库操作封装为 RPC 接口; 将其它所有服务中对该领域数据表的操作替换为 RPC 调用; 拆分该领域的数据表,使用数据同步保证旧库中的表与新表数据一致; 将该子服务中的数据库操作逐步迁移到新表,分批上线; 全部迁移完成后,切断同步,该服务拆分结束。 这种方案能够做到平滑迁移,但其中却有几个棘手的问题: 旧表新表的数据一致性如何保证? 如何支持异构迁移?(由于旧表的设计往往非常范式化,因此拆分后的新表会增加很多来自其它表的冗余列) 如何保证数据同步的实时性?(往往会先迁移读操作到新表,这时就要求旧表的写操作必须准实时地同步到新表) 典型的解决方案有两种: 双写(dual write) :

基于 Kafka 与 Debezium 构建实时数据同步

天大地大妈咪最大 提交于 2020-12-13 11:45:49
起源 在进行架构转型与分库分表之前,我们一直采用非常典型的单体应用架构:主服务是一个 Java WebApp,使用 Nginx 并选择 Session Sticky 分发策略做负载均衡和会话保持;背后是一个 MySQL 主实例,接了若干 Slave 做读写分离。在整个转型开始之前,我们就知道这会是一块难啃的硬骨头:我们要在全线业务飞速地扩张迭代的同时完成架构转型,因为这是实实在在的”给高速行驶的汽车换轮胎”。 为了最大限度地减少服务拆分与分库分表给业务带来的影响(不影响业务开发也是架构转型的前提),我们采用了一种温和的渐进式拆分方案: 对于每块需要拆分的领域,首先拆分出子服务,并将所有该领域的数据库操作封装为 RPC 接口; 将其它所有服务中对该领域数据表的操作替换为 RPC 调用; 拆分该领域的数据表,使用数据同步保证旧库中的表与新表数据一致; 将该子服务中的数据库操作逐步迁移到新表,分批上线; 全部迁移完成后,切断同步,该服务拆分结束。 这种方案能够做到平滑迁移,但其中却有几个棘手的问题: 旧表新表的数据一致性如何保证? 如何支持异构迁移?(由于旧表的设计往往非常范式化,因此拆分后的新表会增加很多来自其它表的冗余列) 如何保证数据同步的实时性?(往往会先迁移读操作到新表,这时就要求旧表的写操作必须准实时地同步到新表) 典型的解决方案有两种: 双写(dual write) :

10大高性能开发宝石,我要消灭一半程序员!

為{幸葍}努か 提交于 2020-12-11 12:53:46
这篇文章,我们循序渐进,从内存、磁盘I/O、网络I/O、CPU、缓存、架构、算法等多层次递进,串联起高性能开发十大必须掌握的核心技术。 - I/O优化:零拷贝技术 - I/O优化:多路复用技术 - 线程池技术 - 无锁编程技术 - 进程间通信技术 - RPC && 序列化技术 - 数据库索引技术 - 缓存技术 && 布隆过滤器 - 全文搜索技术 - 负载均衡技术 准备好了吗,坐稳了,发车! 首先,我们从最简单的模型开始。 老板告诉你,开发一个静态web服务器,把磁盘文件(网页、图片)通过网络发出去,怎么做? 你花了两天时间,撸了一个1.0版本: 主线程进入一个循环,等待连接 来一个连接就启动一个工作线程来处理 工作线程中,等待对方请求,然后从磁盘读文件、往套接口发送数据,完事儿 上线一天,老板发现太慢了,大一点的图片加载都有卡顿感。让你优化,这个时候,你需要: I/O优化:零拷贝技术 上面的工作线程,从磁盘读文件、再通过网络发送数据,数据从磁盘到网络,兜兜转转需要拷贝四次,其中CPU亲自搬运都需要两次。 零拷贝技术 ,解放CPU,文件数据直接从内核发送出去,无需再拷贝到应用程序缓冲区,白白浪费资源。 Linux API: ssize_t sendfile( int out_fd, int in_fd, off_t *offset, size_t count );

Apache Iceberg 的时间旅行是如何实现的?

那年仲夏 提交于 2020-11-30 07:42:57
文章目录 1 Apache Iceberg 的底层数据组织 1.1 Apache Iceberg 用到的一些术语 1.1.1 数据文件(data files) 1.1.2 清单文件(Manifest file) 1.1.3 清单列表(Manifest list) 1.1.4 快照(Snapshot) 2 Apache Iceberg 表的数据组织 3 Apache Iceberg 时间旅行的实现 3.1 查询最新快照的数据 3.2 查询某个快照的数据 3.3 根据时间戳查看某个快照的数据 本文是《 Apache Iceberg 源码解析 》专题的第 2 篇,共 3 篇: Apache Iceberg 小文件合并原理及实践 Apache Iceberg 的时间旅行是如何实现的? 一条数据在 Apache Iceberg 之旅:写过程分析 « 上一篇文章 下一篇文章 » 为了更好的使用 Apache Iceberg ,理解其时间旅行是很有必要的,这个其实也会对 Iceberg 表的读取过程有个大致了解。不过在介绍 Apache Iceberg 的时间旅行(Time travel)之前,我们需要了解 Apache Iceberg 的底层数据组织结构。 Apache Iceberg 的底层数据组织 我们在 《一条数据在 Apache Iceberg 之旅:写过程分析》

分布式文件存储hdfs简介及常用命令

戏子无情 提交于 2020-11-24 12:38:56
1、hdfs简介 1.1 什么是HDFS? HDFS(Hadoop Distributed File System)是hadoop生态系统的一个重要组成部分,是hadoop中的的存储组件,是最基础的一部分,MapReduce等计算模型都要依赖于存储在HDFS中的数据。HDFS是一个分布式文件系统,以流式数据访问模式存储超大文件,将数据分块存储到一个商业硬件集群内的不同机器上。 1.2 HDFS的设计目标 存储超大文件 HDFS适合存储大文件,单个文件大小通常在百MB以上 HDFS适合存储海量文件,总存储量可达PB,EB级 流式数据访问 为数据批处理而设计,关注数据访问的高吞吐量 硬件容错 基于普通机器搭建,硬件错误是常态而不是异常,因此错误检测和快速、自 动的恢复是HDFS最核心的架构目标 简单的一致性模型 一次写入,多次读取 一个文件经过创建、写入和关闭之后就不需要改变 不支持低时间延迟的数据访问 hdfs关心的是高数据吞吐量,不适合那些要求低时间延迟数据访问的应用。 本地计算 将计算移动到数据附近 1.3 HDFS的构成 数据块 文件以块为单位进行切分存储,块通常设置的比较大(最小6M,默认 128M) 块越大,寻址越快,读取效率越高,但同时由于MapReduce任务也是以 块为最小单位来处理,所以太大的块不利于于对数据的并行处理 一个文件至少占用一个块(逻辑概念) 冗余备份

Flink 最锋利的武器:Flink SQL 入门和实战

馋奶兔 提交于 2020-11-08 12:27:11
一、Flink SQL 背景 Flink SQL 是 Flink 实时计算为简化计算模型,降低用户使用实时计算门槛而设计的一套符合标准 SQL 语义的开发语言。 自 2015 年开始,阿里巴巴开始调研开源流计算引擎,最终决定基于 Flink 打造新一代计算引擎,针对 Flink 存在的不足进行优化和改进,并且在 2019 年初将最终代码开源,也就是我们熟知的 Blink。Blink 在原来的 Flink 基础上最显著的一个贡献就是 Flink SQL 的实现。 Flink SQL 是面向用户的 API 层,在我们传统的流式计算领域,比如 Storm、Spark Streaming 都会提供一些 Function 或者 Datastream API,用户通过 Java 或 Scala 写业务逻辑,这种方式虽然灵活,但有一些不足,比如具备一定门槛且调优较难,随着版本的不断更新,API 也出现了很多不兼容的地方。 在这个背景下,毫无疑问,SQL 就成了我们最佳选择,之所以选择将 SQL 作为核心 API,是因为其具有几个非常重要的特点: SQL 属于设定式语言,用户只要表达清楚需求即可,不需要了解具体做法; SQL 可优化,内置多种查询优化器,这些查询优化器可为 SQL 翻译出最优执行计划; SQL 易于理解,不同行业和领域的人都懂,学习成本较低; SQL 非常稳定,在数据库 30

Pulsar Kafka Client 简单介绍

江枫思渺然 提交于 2020-10-31 04:40:08
🎙️阅读本文需要 5 分钟 为了方便 Kafka 用户使用 Pulsar,Pulsar 对 Kafka Client 做了一些封装,让 Kafka 用户更方便的使用 Pulsar。 本篇内容主要介绍 Kafka Client 如何将消息发送到 Pulsar, 并从 Pulsar 消费消息,以及如何使用 Pulsar Schema。 ⌨️ 引入依赖 < dependency > < groupId > org.apache.pulsar </ groupId > < artifactId > pulsar-client-kafka </ artifactId > < version > {project.version} </ version > </ dependency > 依赖引入了 Kafka 的 0.10.2.1 版本的客户端,还有 Pulsar 对 Kafka Client 封装后的客户端。 ⌨️ 使用 Kafka Schema >>> 添加生产者代码 String topic = "persistent://public/default/test" ; Properties props = new Properties(); props.put( "bootstrap.servers" , "pulsar://localhost:6650" ); props.put(