<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[welcome to daijiguo's blog]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/daijiguo</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; daijiguo]]></copyright><item><title><![CDATA[黑暗森林法则]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/125952761</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/125952761</guid><author>daijiguo</author><pubDate>Sat, 23 Jul 2022 21:33:33 +0800</pubDate><description><![CDATA[关于黑暗森林法则]]></description><category></category></item><item><title><![CDATA[git stash]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/121792604</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/121792604</guid><author>daijiguo</author><pubDate>Wed, 08 Dec 2021 15:34:47 +0800</pubDate><description><![CDATA[命令
释义




git stash list
展示 stash 列表


git stash drop
删除最近一条 stash


git stash pop
释放最近一天 stash


git stash
展示 stash 列表


git stash drop 误操作恢复
drop 恢复



]]></description><category></category></item><item><title><![CDATA[Flink Forward Asia 2020：超大规模 Flink 调度优化]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/114501919</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/114501919</guid><author>daijiguo</author><pubDate>Sun, 07 Mar 2021 22:39:54 +0800</pubDate><description><![CDATA[作者介绍：胡伟华/辛朝晖，字节跳动基础架构工程师
整理：MWT（Apache Flink China 社区志愿者）
校对：DJG（Apache Flink China 社区志愿者）
摘要：本文主要介绍在字节跳动在比较大的规模的 Flink 应用场景下遇到的一些问题，以及在调度层面所做的一些优化。内容主要包括6个方面：

相关背景：字节跳动的作业规模，以及在此规模下遇到的问题与挑战；
黑名单机制：Flink 层面针对 NodeManager 异常节点所做的优化；
启动速度优化：Flink 层面针对 TaskM]]></description><category></category></item><item><title><![CDATA[Flink源码编译：Flink1.11+版本编译及部署]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/113946671</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/113946671</guid><author>daijiguo</author><pubDate>Mon, 22 Feb 2021 17:55:31 +0800</pubDate><description><![CDATA[文章目录1. 背景2. 官方推荐配置3. 现状4. 解决
1. 背景
从flink1.11开始，flink项目打包时不再强制依赖hadoop-common、hadoop-hdfs、hadoop-yarn-client等组件，虽然flink-hadoop-fs有依赖hdoop组件，如下：
		&lt;dependency&gt;
			&lt;groupId&gt;org.apache.hadoop&lt;/groupId&gt;
			&lt;artifactId&gt;hadoop-common&lt;/]]></description><category></category></item><item><title><![CDATA[Kafka实战：KafkaConsumer#seek方法不生效]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/113320128</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/113320128</guid><author>daijiguo</author><pubDate>Thu, 28 Jan 2021 15:20:07 +0800</pubDate><description><![CDATA[文章目录1. 背景2. 示例3. 结论
1. 背景
现需要在Kafka管理平台中加入数据预览功能，浏览topic最新的10条数据，我们需要用startOffset = HighWatermark - 10公式求出起始startOffset，从startOffset开始查询分区中的数据。
但是，在使用KafkaConsumer#seek方法设置offset时不生效，KafkaConsumer#poll始终无法拉取到历史数据，更精确地说，始终只能拉取到最新插入的数据。

环境：
CDH 6.3.2
Kafka ]]></description><category></category></item><item><title><![CDATA[Flink源码剖析：自定义TableSink与TableFactory定位过程剖析]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/112853827</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/112853827</guid><author>daijiguo</author><pubDate>Tue, 19 Jan 2021 22:23:40 +0800</pubDate><description><![CDATA[文章目录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]]></description><category></category></item><item><title><![CDATA[Flink Forward Asia 2020：Flink SQL的功能扩展与深度优化]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/112464209</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/112464209</guid><author>daijiguo</author><pubDate>Mon, 11 Jan 2021 11:19:25 +0800</pubDate><description><![CDATA[文章目录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 ]]></description><category></category></item><item><title><![CDATA[Flink源码编译：加快你的编译速度]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/111828666</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/111828666</guid><author>daijiguo</author><pubDate>Sun, 27 Dec 2020 23:42:35 +0800</pubDate><description><![CDATA[文章目录1. 去除不必要的操作2. 用install替代package3. 指定hadoop版本和flink.shaded版本4. 失败继续5. 正确使用mirror和repository
1. 去除不必要的操作
mvn install -DskipTests -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true -Drat.skip=true

2. 用install替代package
install会把Flink中的module安装到本地仓库，这样依赖当前mo]]></description><category></category></item><item><title><![CDATA[Kafka源码剖析：Kafka客户端网络通信模型]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/111354424</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/111354424</guid><author>daijiguo</author><pubDate>Fri, 18 Dec 2020 10:30:37 +0800</pubDate><description><![CDATA[文章目录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 宏观流程



确认数据要发]]></description><category></category></item><item><title><![CDATA[Kafka源码剖析：内存池]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/110964823</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/110964823</guid><author>daijiguo</author><pubDate>Thu, 10 Dec 2020 19:32:47 +0800</pubDate><description><![CDATA[文章目录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就会]]></description><category></category></item><item><title><![CDATA[Flink编码：FlinkSQL全面指南]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/110122609</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/110122609</guid><author>daijiguo</author><pubDate>Wed, 25 Nov 2020 11:58:01 +0800</pubDate><description><![CDATA[文章目录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 滑动窗]]></description><category></category></item><item><title><![CDATA[Flink源码剖析：回撤流]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/109976105</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/109976105</guid><author>daijiguo</author><pubDate>Mon, 23 Nov 2020 01:19:16 +0800</pubDate><description><![CDATA[文章目录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对应的数据再次到来，会生成]]></description><category></category></item><item><title><![CDATA[Flink源码剖析：ValueState]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/109700189</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/109700189</guid><author>daijiguo</author><pubDate>Sun, 15 Nov 2020 09:21:57 +0800</pubDate><description><![CDATA[文章目录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内未出现的消息发往下游的功能，示例代码可以运行，有兴趣的同学不]]></description><category></category></item><item><title><![CDATA[Flink源码剖析：Metrics运作机制]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/109282502</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/109282502</guid><author>daijiguo</author><pubDate>Mon, 26 Oct 2020 08:03:04 +0800</pubDate><description><![CDATA[文章目录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]]></description><category></category></item><item><title><![CDATA[Flink调优：数据倾斜优化]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/109026627</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/109026627</guid><author>daijiguo</author><pubDate>Mon, 12 Oct 2020 14:11:34 +0800</pubDate><description><![CDATA[文章目录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 PartialFinal
1. 定义
当进行聚合运算时（Group By/KeyBy + Agg），如果聚合所使用的key存在热点，则会导致数据倾斜。如统计某日各个省份的车流量，则负责运算北京、上海等]]></description><category></category></item><item><title><![CDATA[Kafka Connect：Debezium Connector远程调试]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/108754054</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/108754054</guid><author>daijiguo</author><pubDate>Wed, 23 Sep 2020 15:25:22 +0800</pubDate><description><![CDATA[文章目录1. 分析启动脚本1.1 启动命令1.2 kafka-run-class2. idea配置
1. 分析启动脚本
1.1 启动命令
# background running mode
cd /home/lenmom/workspace/software/confluent-community-5.1.0-2.11/ &amp;&amp;./bin/connect-distributed -daemon ./etc/schema-registry/connect-avro-distributed.pro]]></description><category></category></item><item><title><![CDATA[Flink原理：窗口原理详解]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/108334685</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/108334685</guid><author>daijiguo</author><pubDate>Tue, 01 Sep 2020 09:44:01 +0800</pubDate><description><![CDATA[文章目录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]]></description><category></category></item><item><title><![CDATA[Flink原理：定时器]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/108334665</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/108334665</guid><author>daijiguo</author><pubDate>Tue, 01 Sep 2020 09:43:11 +0800</pubDate><description><![CDATA[文章目录1. 用途2. 示例3. 原理3.1 注册3.2 触发3.3 延迟队列state3.4 定时器注意事项
1. 用途
Flink定时器存在于窗口的触发，窗口状态的清理，TTL等诸多用途，因此搞清楚其原理对于理解这些知识点至关重要。
2. 示例
在flink实时处理中，涉及到延时处理可使用KeyedProcessFunction来完成，KeyedProcessFunction是flink提供面向用户的low level api，可以访问状态、当前的watermark或者当前的processingtime]]></description><category></category></item><item><title><![CDATA[Flink监控：自定义消费延迟Metrics]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/107868359</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/107868359</guid><author>daijiguo</author><pubDate>Fri, 07 Aug 2020 18:30:04 +0800</pubDate><description><![CDATA[文章目录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 Metrics
1. 需求]]></description><category></category></item><item><title><![CDATA[Flink源码剖析：Flink Async I/O的三种模式]]></title><link>https://blog.youkuaiyun.com/daijiguo/article/details/106789586</link><guid>https://blog.youkuaiyun.com/daijiguo/article/details/106789586</guid><author>daijiguo</author><pubDate>Tue, 16 Jun 2020 16:14:12 +0800</pubDate><description><![CDATA[文章目录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的查询请求，然]]></description><category></category></item></channel></rss>