Flink ClickHouse Sink如何打造生产级高可用写入方案?
- 内容介绍
- 文章标签
- 相关推荐
你有没有遇到过那种情况嗯?就是你辛辛苦苦搭了个Flink作业, 想把数据写进ClickHouse,后来啊发现官方的Sink根本扛不住生产环境的折腾?别骗自己了那玩意儿就是个玩具。我们今天就来聊聊怎么 搞出一套能用、好用、还特么稳定的Flink + ClickHouse写入方案,太硬核了。。
为什么说官方的Flink ClickHouse Sink是“玩具”?
先说个实话:Flink官方提供的那个jdbc sink, 虽然名字听着挺高大上,但一到生产环境就露怯了。它最大的问题就是——没有基于数据量的攒批机制。啥意思呢?就是它只能按记录数攒批, 我悟了。 比如你设置batchSize=1000,那它就等buffer里攒够1000条再刷一次。但如果每条数据都特别大,那还没攒够1000条内存就爆了。你说这能叫高可用吗?

而且, 它还不支持动态节点发现、不支持本地表直写、 上手。 不支持重试机制……一句话:太脆了扛不住压力。
痛点一:缺乏基于数据量的攒批机制
代码看起来是这样的:
// Flink 官方 JD娱乐 Sink 的实现
public class JdbcSink extends RichSinkFunction {
private final int batchSize;// 固定批次大小
@Override
public void invoke {
bufferedValues.add;
if == batchSize) {
flush;
}
}
}
看出来了吧?它只看记录数,不管数据大小。这简直就是个定时炸弹。
我们怎么搞?
我们搞了一套自研的Flink ClickHouse Sink,专门用来解决这些痛点。
你有没有遇到过那种情况嗯?就是你辛辛苦苦搭了个Flink作业, 想把数据写进ClickHouse,后来啊发现官方的Sink根本扛不住生产环境的折腾?别骗自己了那玩意儿就是个玩具。我们今天就来聊聊怎么 搞出一套能用、好用、还特么稳定的Flink + ClickHouse写入方案,太硬核了。。
为什么说官方的Flink ClickHouse Sink是“玩具”?
先说个实话:Flink官方提供的那个jdbc sink, 虽然名字听着挺高大上,但一到生产环境就露怯了。它最大的问题就是——没有基于数据量的攒批机制。啥意思呢?就是它只能按记录数攒批, 我悟了。 比如你设置batchSize=1000,那它就等buffer里攒够1000条再刷一次。但如果每条数据都特别大,那还没攒够1000条内存就爆了。你说这能叫高可用吗?

而且, 它还不支持动态节点发现、不支持本地表直写、 上手。 不支持重试机制……一句话:太脆了扛不住压力。
痛点一:缺乏基于数据量的攒批机制
代码看起来是这样的:
// Flink 官方 JD娱乐 Sink 的实现
public class JdbcSink extends RichSinkFunction {
private final int batchSize;// 固定批次大小
@Override
public void invoke {
bufferedValues.add;
if == batchSize) {
flush;
}
}
}
看出来了吧?它只看记录数,不管数据大小。这简直就是个定时炸弹。
我们怎么搞?
我们搞了一套自研的Flink ClickHouse Sink,专门用来解决这些痛点。

