Flink自定义InpputFormat

Flink自定义InputFormat
package com.demo;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.demo.ApplicationContextUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.flink.api.common.io.DefaultInputSplitAssigner;
import org.apache.flink.api.common.io.RichInputFormat;
import org.apache.flink.api.common.io.statistics.BaseStatistics;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.core.io.GenericInputSplit;
import org.apache.flink.core.io.InputSplit;
import org.apache.flink.core.io.InputSplitAssigner;

import java.io.IOException;
import java.io.Serializable;
import java.util.*;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.stream.IntStream;


public class CustomInputFormat extends RichInputFormat<CustomData, InputSplit> {
    //查询数据库mapper
	private DataMapper ma
### 创建和使用Apache Flink自定义连接器 #### 开发Flink自定义Source和Sink 为了在Flink中实现自定义的Source或Sink,开发者可以遵循官方文档中的指导[^1]。通常情况下,构建一个自定义的数据源(Source)或者数据接收端(Sink),涉及到几个核心组件的设计: 对于`SourceFunction`来说,主要负责从外部系统拉取消息并将其转换成流的形式输入到Flink作业中;而对于`SinkFunction`而言,则是要把处理后的结果发送给目标存储或者其他服务。 当创建一个新的sink时,除了编写具体的业务逻辑外,还需要考虑如何高效地管理资源以及确保事务的一致性等问题。例如,在向Redis数据库写入数据的过程中,可以通过批量提交的方式提高性能,并利用Flink提供的checkpoint机制来保障数据的安全性和准确性[^2]。 #### 配置SQL环境下的自定义Connector 如果希望能够在基于SQL语句的操作环境中应用这些定制化的链接方式,那么就需要进一步扩展至表工厂(Table Factory Service)层面的工作了。这一步骤的关键在于通过SPI(Service Provider Interface)模式注册特定类型的factory类实例,使得它们能够被框架自动发现并加载进来参与后续流程。 具体做法是在项目根路径下新建名为`META-INF/services/`的文件夹,并在其内部放置指向实际实现了`org.apache.flink.table.factories.Factory`接口的具体子类的文字描述文件[^3]。这样做的好处是可以让不同版本间的兼容变得更加容易维护的同时也简化了用户的配置过程。 另外一种方法是让用户直接指定相应的工厂对象作为参数传递进去,即继承`DynamicTableSinkFactory`与`DynamicTableSourceFactory`两个抽象基类之一完成必要的重载操作之后再传回给解析引擎去调用相应的方法从而达到相同的效果[^4]。 #### 主要配置项说明 最后值得注意的是,在某些场景下可能还会涉及一些额外的基础架构级别的调整工作。比如针对Hive集成的需求,可以在`flink-conf.yaml`这个全局性的配置文件里添加如下所示的相关条目以激活对应的功能模块[^5]: ```yaml table.env.catalog.default.name: myHiveCatalog table.env.catalog.myHiveCatalog.impl: org.apache.flink.table.catalog.hive.HiveCatalog table.catalog.myHiveCatalog.metastore.uris: thrift://localhost:9083 ``` 上述设置允许用户轻松切换不同的元数据仓库位置而无需修改应用程序本身的任何部分。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值