Flink输出算子Sink

1.输出到文件

StreamingFileSink 支持行编码(Row-encoded)和批量编码(Bulk-encoded,比如Parquet)格式。这两种不同的方式都有各自的构建器(builder),调用方法也非常简单,可以直接调用StreamingFileSink 的静态方法:

  • 行编码:StreamingFileSink.forRowFormat(basePath,rowEncoder)。

  • 批量编码:StreamingFileSink.forBulkFormat(basePath,bulkWriterFactory)。

在创建行或批量编码Sink 时,我们需要传入两个参数,用来指定存储桶的基本路径

(basePath)和数据的编码逻辑(rowEncoder 或 bulkWriterFactory)。

StreamingFileSink<String> fileSink = StreamingFileSink
.<String>forRowFormat(new Path("./output"), new SimpleStringEncoder<>("UTF-8"))
.withRollingPolicy(
DefaultRollingPolicy.builder()
.withRolloverInterval(TimeUnit.MINUTES.toMillis(15)
)
.withInactivityInterval(TimeUnit.MINUTES.toMillis(5
))
.withMaxPartSize(1024 * 1024 * 1024)
.build())
.build();

// 将 Event 转换成 String 写入文件
stream.map(Event::toString).addSink(fileSink);

这里我们创建了一个简单的文件Sink,通过.withRollingPolicy()方法指定了一个“滚动策略”。“滚动”的概念在日志文件的写入中经常遇到:因为文件会有内容持续不断地写入,所以我们应该给一个标准,到什么时候就开启新的文件,将之前的内容归档保存。也就是说,上面的代码设置了在以下3 种情况下,我们就会滚动分区文件:

  • 至少包含15 分钟的数据

  • 最近5 分钟没有收到新的数据

  • 文件大小已达到1 GB

2.输出到kafka

现在我们要将数据输出到Kafka,整个数据处理的闭环已经形成,所以可以完整测试如下:

  1. 添加Kafka 连接器依赖

由于我们已经测试过从Kafka 数据源读取数据,连接器相关依赖已经引入,这里就不重复介绍了。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值