Flink ClickHouse Sink如何打造生产级高可用写入方案?

2026-05-30 09:384阅读0评论建站教程
  • 内容介绍
  • 文章标签
  • 相关推荐

你有没有遇到过那种情况嗯?就是你辛辛苦苦搭了个Flink作业, 想把数据写进ClickHouse,后来啊发现官方的Sink根本扛不住生产环境的折腾?别骗自己了那玩意儿就是个玩具。我们今天就来聊聊怎么 搞出一套能用、好用、还特么稳定的Flink + ClickHouse写入方案,太硬核了。。

为什么说官方的Flink ClickHouse Sink是“玩具”?

先说个实话:Flink官方提供的那个jdbc sink, 虽然名字听着挺高大上,但一到生产环境就露怯了。它最大的问题就是——没有基于数据量的攒批机制。啥意思呢?就是它只能按记录数攒批, 我悟了。 比如你设置batchSize=1000,那它就等buffer里攒够1000条再刷一次。但如果每条数据都特别大,那还没攒够1000条内存就爆了。你说这能叫高可用吗?

Flink ClickHouse Sink:生产级高可用写入方案|得物技术

而且, 它还不支持动态节点发现、不支持本地表直写、 上手。 不支持重试机制……一句话:太脆了扛不住压力。

痛点一:缺乏基于数据量的攒批机制

代码看起来是这样的:

// 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 ClickHouse Sink:生产级高可用写入方案|得物技术

而且, 它还不支持动态节点发现、不支持本地表直写、 上手。 不支持重试机制……一句话:太脆了扛不住压力。

痛点一:缺乏基于数据量的攒批机制

代码看起来是这样的:

// Flink 官方 JD娱乐 Sink 的实现
public class JdbcSink extends RichSinkFunction {
    private final int batchSize;// 固定批次大小
    @Override
    public void invoke {
        bufferedValues.add;
        if  == batchSize) {
            flush;
        }
    }
}

看出来了吧?它只看记录数,不管数据大小。这简直就是个定时炸弹。

我们怎么搞?

我们搞了一套自研的Flink ClickHouse Sink,专门用来解决这些痛点。

阅读全文