自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(625)
  • 问答 (4)
  • 收藏
  • 关注

原创 黑暗森林法则

关于黑暗森林法则

2022-07-23 21:33:33 2654 1

原创 git stash

命令释义git stash list展示 stash 列表git stash drop删除最近一条 stashgit stash pop释放最近一天 stashgit stash展示 stash 列表git stash drop 误操作恢复drop 恢复

2021-12-08 15:34:47 335

原创 Flink Forward Asia 2020:超大规模 Flink 调度优化

作者介绍:胡伟华/辛朝晖,字节跳动基础架构工程师整理:MWT(Apache Flink China 社区志愿者)校对:DJG(Apache Flink China 社区志愿者)摘要:本文主要介绍在字节跳动在比较大的规模的 Flink 应用场景下遇到的一些问题,以及在调度层面所做的一些优化。内容主要包括6个方面:相关背景:字节跳动的作业规模,以及在此规模下遇到的问题与挑战;黑名单机制:Flink 层面针对 NodeManager 异常节点所做的优化;启动速度优化:Flink 层面针对 TaskM

2021-03-07 22:39:54 802

原创 Flink源码编译:Flink1.11+版本编译及部署

文章目录1. 背景2. 官方推荐配置3. 现状4. 解决1. 背景从flink1.11开始,flink项目打包时不再强制依赖hadoop-common、hadoop-hdfs、hadoop-yarn-client等组件,虽然flink-hadoop-fs有依赖hdoop组件,如下: <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</

2021-02-22 17:55:31 1030

原创 Kafka实战:KafkaConsumer#seek方法不生效

文章目录1. 背景2. 示例3. 结论1. 背景现需要在Kafka管理平台中加入数据预览功能,浏览topic最新的10条数据,我们需要用startOffset = HighWatermark - 10公式求出起始startOffset,从startOffset开始查询分区中的数据。但是,在使用KafkaConsumer#seek方法设置offset时不生效,KafkaConsumer#poll始终无法拉取到历史数据,更精确地说,始终只能拉取到最新插入的数据。环境:CDH 6.3.2Kafka

2021-01-28 15:20:07 1206 1

原创 Flink源码剖析:自定义TableSink与TableFactory定位过程剖析

文章目录1. 背景2. user-defined redis sink2.1 RedisTableSinkFactory2.2 RedisTableSink2.3 RedisSink3. TableFactory定位1. 背景现有自定义redis sink的需求,我们借此学习一下如何自定义flink sink connector,以及flink是如何通过ddl建表语句中的properties来定位具体的TableFactory,进而创建StreamTableSink的。该文介绍的写法是Flink1.1

2021-01-19 22:23:40 916

原创 Flink Forward Asia 2020:Flink SQL的功能扩展与深度优化

文章目录1. 背景及现状1.1 三种模式的分析1.2 腾讯目前的工作2. 窗口功能扩展2.1 新的窗口操作2.1.1 先Join再开窗2.1.2 Interval Join2.1.3 Windowing Table-Valued Function2.1.4 实现细节2.1.4.1 窗口的传播2.1.4.2 时间属性字段2.1.4.3 时间水印2.1.4.4 使用约束2.2 新的窗口类型2.2.1 Incremental Window2.2.1.1 多次触发2.2.1.2 Lazy Trigger2.2.2

2021-01-11 11:19:25 496

原创 Flink源码编译:加快你的编译速度

文章目录1. 去除不必要的操作2. 用install替代package3. 指定hadoop版本和flink.shaded版本4. 失败继续5. 正确使用mirror和repository1. 去除不必要的操作mvn install -DskipTests -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true -Drat.skip=true2. 用install替代packageinstall会把Flink中的module安装到本地仓库,这样依赖当前mo

2020-12-27 23:42:35 441

原创 Kafka源码剖析:Kafka客户端网络通信模型

文章目录0. 概述1. KafkaProducer数据发送流程1.1 宏观流程1.2 微观流程2. 元数据更新流程2.1 流程2.2 元数据变化动态感知2.2.1 强制更新2.2.2 周期更新3. Kafka客户端通信模型3.1 连接3.2 发送3.3 读写3.4 处理返回0. 概述本文旨在借助对ProduceRequest和MetadataRequest两种请求的请求链路的分析,得出kafka客户端网络模型的通用步骤。1. KafkaProducer数据发送流程1.1 宏观流程确认数据要发

2020-12-18 10:30:37 545

原创 Kafka源码剖析:内存池

文章目录1. Why BufferPool ?1.1 Why two kinds of pools ?2. What is a BufferPool ?3. How BufferPool run ?1. Why BufferPool ?Kafka Producer以ProducerBatch为单位发送数据,而ProducerBatch中的数据以ByteBuffer的形式进行存储。当发送端数据量极大时,ByteBuffer就会无限制地频繁申请,可能会引发OOM;另外,发送完数据后,ByteBuffer就会

2020-12-10 19:32:47 781 1

原创 Flink编码:FlinkSQL全面指南

文章目录1. FlinkSQL定位2. 流与表的对偶性3. 持续查询/增量计算4. 回撤流5. Flink 1.11关于SQL的增强5.1 DDL写法5.2 主键5.3 Catalog6. JOIN算子6.1 双流JOIN原理6.1.1 Inner Join6.1.2 Left Join6.1.3 State数据结构7. 窗口7.1 OverWindow7.1.1 基于数据条目的overwindow7.1.2 基于时间的overwindow7.2 GroupWindow7.2.1 滚动窗口7.2.2 滑动窗

2020-11-25 11:58:01 1426

原创 Flink源码剖析:回撤流

文章目录1. 定义2. 示例2.1 源码分析2.1.1 聚合算子回撤2.1.2 Sink算子回撤2.1.3 聚合算子回撤 VS Sink算子回撤1. 定义Flink中,Kafka Source是非回撤流,Group By是回撤流。所谓回撤流,就是可以更新历史数据的流,更新历史数据并不是将发往下游的历史数据进行更改,要知道,已经发往下游的消息是追不回来的。更新历史数据的含义是,在得知某个Key(接在Key BY / Group By后的字段)对应数据已经存在的情况下,如果该Key对应的数据再次到来,会生成

2020-11-23 01:19:16 3254

原创 Flink源码剖析:ValueState

文章目录1. 定义2. 示例3. 源码3.1 Update方法3.2 Value方法1. 定义State一般指一个具体的task的状态,而checkpoint则表示了一个Flink Job在一个特定时刻的一份全局状态快照,即对所有task的state进行持久化。Flink中有两种基本类型的State:Keyed State,Operator State。2. 示例下面一个有关定时器timer和Keyed State的代码示例,实现将10s内未出现的消息发往下游的功能,示例代码可以运行,有兴趣的同学不

2020-11-15 09:21:57 397 1

原创 Flink源码剖析:Metrics运作机制

文章目录1. Metrics简介1.1 什么是 Metrics?1.2 Metric Types1.3 Metric Group2. Metrics运行机制2.1 初始化Reporter2.1.1 PrometheusReporter2.1.2 PrometheusPushGatewayReporter2.2 注册Reporter2.3 收集Metrics到内存2.4 发送Metrics到第三方存储1. Metrics简介1.1 什么是 Metrics?Flink 提供的 Metrics 可以在 Fl

2020-10-26 08:03:04 714

原创 Flink调优:数据倾斜优化

文章目录1. 定义1.1 危害1.1.1 任务卡死1.1.1 checkpoint时间变长1.1.2 state变大2. 解决办法2.1 修改分区策略2.1.1 目标2.1.2 手段2.2 两阶段聚合2.2.1 目标2.2.2 手段2.2.2.1 修改sql2.2.2.2 localglobal2.2.2.3 PartialFinal1. 定义当进行聚合运算时(Group By/KeyBy + Agg),如果聚合所使用的key存在热点,则会导致数据倾斜。如统计某日各个省份的车流量,则负责运算北京、上海等

2020-10-12 14:11:34 1861

原创 Kafka Connect:Debezium Connector远程调试

文章目录1. 分析启动脚本1.1 启动命令1.2 kafka-run-class2. idea配置1. 分析启动脚本1.1 启动命令# background running modecd /home/lenmom/workspace/software/confluent-community-5.1.0-2.11/ &&./bin/connect-distributed -daemon ./etc/schema-registry/connect-avro-distributed.pro

2020-09-23 15:25:22 917

原创 Flink原理:窗口原理详解

文章目录1. 定义2. 窗口分类2.1 Time Window2.1.1 Flink中的时间种类有哪些2.1.2 Tumbling Time Window2.1.3 Sliding Time Window2.2 Count Window2.2.1 Tumbling Count Window2.2.2 Sliding Count Window2.3 Session Window3. 窗口组件4. 源码分析4.1 Count Window源码4.2 Time Window源码5. 窗口state5.1 stat

2020-09-01 09:44:01 862

原创 Flink原理:定时器

文章目录1. 用途2. 示例3. 原理3.1 注册3.2 触发3.3 延迟队列state3.4 定时器注意事项1. 用途Flink定时器存在于窗口的触发,窗口状态的清理,TTL等诸多用途,因此搞清楚其原理对于理解这些知识点至关重要。2. 示例在flink实时处理中,涉及到延时处理可使用KeyedProcessFunction来完成,KeyedProcessFunction是flink提供面向用户的low level api,可以访问状态、当前的watermark或者当前的processingtime

2020-09-01 09:43:11 1431 1

原创 Flink监控:自定义消费延迟Metrics

文章目录1. 需求2. 名词解释2.1 committed-offsets2.2 current-offsets2.3 highWatermark3. 自定义Metrics3.1 flink kafka source connector源码分析3.1.2 周期提交3.1.3 Checkpoint时提交3.2 定义HighWatermark Metrics3.2.1 自定义flink kafka consumer3.2.2 自定义序列化器3.2.1 自定义HighWatermark Metrics1. 需求

2020-08-07 18:30:04 3454 6

原创 Flink源码剖析:Flink Async I/O的三种模式

文章目录1. 维表join2. richmapfunction2.1 示例3. asyncio3.1 示例3.2 Ordered模式3.2.1 生产3.2.2 消费3.3 基于processtime的unordered模式3.3.1 生产3.3.2 消费3.4 基于eventTime的unordered模式3.4.1 生产3.4.2 消费4. 总结1. 维表join流计算系统中经常需要与外部系统进行交互,比如需要查询外部数据库以关联上用户的额外信息。通常,我们的实现方式是向数据库发送用户a的查询请求,然

2020-06-16 16:14:12 1369

原创 Flink原理:Flink中的日志框架配置

文章目录1. 背景2. 日志门面slf4j2.1 slf4j + log4j2.2 slf4j + log4j23. 避免冲突4. 总结1. 背景很多同学在进行Flink开发时,无论是使用log4j或log4j2,常常出现各种问题,如下图所示:今天我们就要拨开云雾见天日,聊聊日志相关的知识,搞清楚这些报错的原因。众所周知,现代框架都是用门面模式进行日志输出,例如使用Slf4j中的接口输出日志,具体实现类需要由log4j,log4j2,logback等日志框架进行实现,如Flink的类中是这样输出日志

2020-06-13 22:48:19 2006

原创 Flink源码编译:运行示例代码时绕过test编译

背景跑 flink-examples,各种报错,各种Test module之间依赖找不到,及其头大!疑惑寻找解决办法时,心中不禁冒出三个问题:为什么跑 flink-examples的时候,Intellij idea会自动build一些无关紧要的代码 ?build是否可以绕过Test,直接运行当前flink-exmaples中的代码?build与maven compile的区别是什么?答案针对以上3个问题,一一解答:跑Intellij idea时,默认会强制进行build,包括一些无

2020-06-04 22:41:28 577

原创 NIO进阶篇:Page Cache、零拷贝、顺序读写、堆外内存

文章目录DMADMA原理Page Cache文件Page Cache的作用Page Cache相关的数据结构零拷贝常规文件读写mmapsendfile顺序读写堆外内存堆内存与堆外内存的关系堆外内存的回收DMA在学习零拷贝等NIO技术之前,我们需要先知道什么是DMA。DMA(Direct Memory Access,直接存储器访问)。在DMA出现之前,CPU与外设之间的数据传送方式有程序传送方式、中断传送方式。CPU是通过系统总线与其他部件连接并进行数据传输。不管何种传送方式,都要消耗CPU,间接影响了其

2020-05-31 16:37:29 2064

原创 NIO基础篇:Buffer、Channel、Selector

文章目录NIO概念缓冲区缓冲区类型缓冲区基本属性Buffer常用方法缓冲区的数据操作直接与非直接缓冲区通道通道类型获取通道通道的数据传输NIO的非阻塞式网络通信SelectorSelectionKey示例NIO概念Java NIO(New IO)是从Java 1.4版本开始引入的 一个新的IO API,可以替代标准的Java IO API。 NIO与原来的IO有同样的作用和目的,但是使用 的方式完全不同,NIO支持面向缓冲区的、基于 通道的IO操作。NIO将以更加高效的方式进行文 件的读写操作。

2020-05-31 16:36:58 342

原创 为什么会产生依赖冲突?

问:既然maven有”短路优先“和”第一声明“原则来判断需要使用哪个类,为什么还会发生依赖冲突?答:想要回答这个问题,不妨思考一下以下两个问题1、“maven的两个原则发生生命周期的哪一个phase?”2、“发生jar包冲突时,为什么编译期不报错,但是运行期会报错,jar包冲突的问题为什么就这么把编译器忽悠过去了?”首先,在编译阶段,maven是不会进行两个原则的判断的,只要有相应版本的依赖,就可以正确编译,并不涉及多选一的问题;然后,在打包阶段,maven会真正按照两个原则去进行打包,从多个版本

2020-05-26 17:58:02 349

原创 Kafka监控:consumer消费进度查询方案的演变

文章目录1. 背景2. 方案一:__consumer_offsets2.1 消息格式2.2 代码3. 方案二:AdminClient3.1 流程3.2 代码1. 背景大数据平台经常以Kafka作为消息中间件,且需要有完整的针对Kafka的管理和监控体系,例如实时查看:current-offset:topic在不同消费者组中的消费进度log-end-offset: topic中的可见消息总量Lag:消费延迟,lag=logEndOffset - currentOffset消费进度的保存机制在不同的

2020-05-11 14:20:31 1104 1

原创 Kafka安全认证:SASL/GSSAPI(kerberos)

文章目录kafka和zookeeper开启kerberos认证1. 环境2. 创建主体并生成keytab3. 配置jaas.conf4. 配置kafka server.properties5. 配置kafka zookeeper.properties6. kafka broker+zookeeper启动脚本7. kafka client的使用7.1 producer7.2 consumerkaf...

2020-05-01 21:02:12 3896

原创 Kafka安全认证:centos7上安装kerberos

文章目录1.kerberos概念介绍2. kerberos认证过程3. kerberos安装4. 创建 KDC 数据库5. 编辑 `kadm5.acl`6. 启动kdc和admin7. 添加principal8. 使用keytab登陆1.kerberos概念介绍principal:认证的主体,如kafka/[email protected],其中kafka是主体的用...

2020-05-01 21:01:19 1143

原创 Flink原理:这一次带你彻底搞懂watermark

文章目录背景定义生成1. 生成时机2. 生成方式更新规则1. 单并行度2. 多并行度传播窗口触发时机分析1. 示例一2. 示例二3. 示例三如何设置最大乱序时间延迟数据处理1. 定义2. 触发条件3. 示例延迟数据重定向1. 定义2. 示例背景我们知道,流处理从事件产生,到流经source,再到operator,中间是有一个过程和时间的。虽然大部分情况下,流到operator的数据都是按照事件...

2020-04-23 14:10:58 1438 3

原创 Flink问题:记Flink Metrics时断时续问题排查

文章目录1. 背景2. 问题分析2.1 实验设计2.2 源码分析3. 解决方法1. 背景用prometheus+pushgateway+grafana监控体系对flink的各项metrics进行监控,出现如下图所示状况:可以发现,指标每过一些时间就会消失,然后又出现。2. 问题分析2.1 实验设计存在三种可能,1:prometheus有bug导致拉不到数据;2:pushgateway...

2020-04-11 22:57:38 4223 4

原创 插件化开发进阶篇—利用SPI进行插件化开发

文章目录1. 为什么要进行插件化开发?2.类加载器命名空间3. SPI3.1 示例3.2 源码解析4. class缓存查找机制4.1 findLoadedClass缓存查找4.2 Class.forName缓存查找5. 文件监听机制5.1 示例5.2 源码解析1. 为什么要进行插件化开发?1、解决依赖冲突设想如下场景,不同Hadoop厂商例如HDP和CDH的中使用了hadoop-yarn-c...

2020-04-09 23:38:49 1028

原创 插件化开发基础篇—类加载

文章目录1. 什么是类加载?2. 类加载的方式?2.1 显式加载2.2 隐式加载2.2.1 延迟加载3. 类加载的过程4. 双亲委派4.1 确立父子关系4.2 委派过程4.3优缺点5. 打破双亲委派6. 命名空间1. 什么是类加载?每个编写的".java"拓展名类文件都存储着需要执行的程序逻辑,这些".java"文件经过Java编译器编译成拓展名为".class"的文件,".class"文件中...

2020-04-07 22:57:00 272

原创 mysql redolog binlog 之二阶段提交

文章目录一:什么是redolog和binglog?二:redolog和binlog可以相互替代或者只保留其一吗?1. 可以使用binlog替代redolog进行数据恢复吗?2. 可以只适用redolog而不是用binlog吗?三:为什么redolog和binlog要进行二阶段提交?四:二阶段提交步骤五、redolog和binlog二阶段提交与redolog和binlog的顺序提交是否真的有区别?六...

2020-03-20 10:08:41 6284 2

原创 mysql MVVC查询需要满足的条件

mysql MVVC用于repeatable read隔离级别,用于解决不可重复度的问题,根据MVVC机制,查询出来的行需满足以下两个条件:查询出来的行的创建时间小于等于当前事务ID,以确保执行当前事务之时,记录已经存在查询出来的行的删除时间,要么未定义,要么大于当前事务ID,以确保执行当前事务之时,记录还未被删除参考:https://blog.csdn.net/whoamiyang...

2020-03-18 08:23:05 368

原创 Kafka原理:kafka之mmap文件读写方式

众所周知,kafka之所以吞吐量高,其中的一个重要原因就是因为其consumer在读取事件时使用了mmap的方式,mmap与常规文件读写的区别如下:参考:https://juejin.im/post/59f8691b51882534af254317#heading-16https://www.cnblogs.com/huxiao-tee/p/4657851.html#_label2ht...

2020-03-15 00:03:34 4575 3

原创 混合云环境下如何通过java代码代理文件上传功能

  背景:现有如下业务,执行代理(node)要代理服务端(server)的上传功能,之所以要这样做,是因为要将整个应用进行混合云部署,即node服务要部署在客户集群对外提供有限端口以确保安全性,而server服务要上云。因此server所提供的上传功能无法直接将文件传到客户内网的hdfs,需要先传到node,再传到客户集群的hdfs。  server端通过dubbo rest(dubbo内置的通...

2020-02-27 11:57:53 362

原创 Kafka Connect:kafka connect实时ETL启动与停止脚本

自己搭建了kafka connect实时ETL环境,并编写了shell脚本以方便启动和停止,具体代码如下:启动脚本:#!/bin/bash#脚本涵盖从启动kafka connect集群到schema-registry和schema-registry-ui的整个实时ETL环境的启动#日志清空echo '' > /Users/djg/env/kafka_2.12-2.2.2/star...

2019-12-13 10:21:17 794

原创 logback配置总结

<root>是根级别的<logger>,本质上没有区别日志由低级<logger>向高级<logger>传递,不可越级。所谓级别更高,无非是以下两种情况:①包名更浅②比级别更高低级<logger>和高级<logger>的互动操作无非有以下两种情况:①如果低级<logger>没有设置level属性,低级&l...

2019-11-28 17:57:58 207

原创 关于elasticsearch中_update_by_query接口乐观锁的思考

背景:  给某银行做一个实时计算项目,用户交易记录链路为oracle->ogg->kafka->flink->elasticsearch,交易记录最终到达Elasticsearch中并对外提供查询服务,交易记录中有个printNum字段,用来表示某条交易记录的打印次数,现需要提供一个接口进行打印次数的更新。方案:  首先想到的是,将这条记录的printNum查询出来然...

2019-11-04 20:30:05 1613

原创 centos7中利用systemd.timer设置定时时间同步

背景centos7安装在windows中的vmware虚拟机中,一旦windows进入睡眠状态,则centos7也会休眠且系统时间会停止,因此centos7的系统时间会逐步比windows慢,想到用定时任务的方式去同步互联网时间,以保持centos7的准确。大家都很熟悉crontab了,但其只能精确到秒级别,查阅资料发现systemctld也有定时任务功能,于是进行了尝试。实现编写同步时间...

2019-10-04 21:22:10 1315 1

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除