Apache kafka Flink:binlog到多DTO的转换及Flink中的转换方法
卡夫卡、弗林克和蒂布的新版本。 假设我有三个MySql源表Apache kafka Flink:binlog到多DTO的转换及Flink中的转换方法,apache-kafka,flink-streaming,real-time-data,tidb,Apache Kafka,Flink Streaming,Real Time Data,Tidb,卡夫卡、弗林克和蒂布的新版本。 假设我有三个MySql源表s_a,s_b,和s_c,并希望实时收集记录到目标TiDb表t_a和t_b。 映射规则是 `s_a` --> `t_a` `s_b` union `s_c` ---> `t_b` with some transformation (e.g., field remapping). 我采用的解决方案是kafka+Flink和Tidb sink,其中binlog更改订阅到kafka主题
s_a
,s_b
,和s_c
,并希望实时收集记录到目标TiDb表t_a
和t_b
。
映射规则是
`s_a` --> `t_a`
`s_b` union `s_c` ---> `t_b` with some transformation (e.g., field remapping).
我采用的解决方案是kafka+Flink和Tidb sink,其中binlog更改订阅到kafka主题;Flink使用主题并将转换后的结果写入Tidb。我在flink代码部分遇到的问题是:
t_a
或t_b
)。我发现了一个名为Debezium
的工具,名为Kafka&Flink connector,但它似乎需要源表和目标表之间的相等性
VKDataMapper
。我很难定义T
,因为它可以是T_a
DTO(数据传输对象)或T_b
DTO
StreamExecutionEnvironment environment =
StreamExecutionEnvironment.getExecutionEnvironment();
//consume is FlinkkafkaConsumer. TopicFilter returns true.
environment.addSource(consumer).filter(new TopicFilter()).map(new VKDataMapper())
.addSink(new TidbSink());
try {
environment.execute();
} catch (Exception e) {
log.error("exception {}", e);
}
public class VKDataMapper implements MapFunction<String, T> {
@Override
public T map(String value) throws Exception {
//How T can represents both `T_a data DTO` `T_b`....,
return null;
}
}
StreamExecutionEnvironment环境=
StreamExecutionEnvironment.getExecutionEnvironment();
//消费就是消费。TopicFilter返回true。
environment.addSource(consumer).filter(新的TopicFilter()).map(新的VKDataMapper())
.addSink(新的TidbSink());
试一试{
execute();
}捕获(例外e){
log.error(“异常{}”,e);
}
公共类VKDataMapper实现映射函数{
@凌驾
公共T映射(字符串值)引发异常{
//如何将'T_a data DTO'表示为'T_b'。。。。,
返回null;
}
}
为什么不试试Flink SQL?这样,您只需在Flink中创建一些表,然后通过sql定义任务,如:
insert into t_a select * from s_a;
insert into t_b select * from s_b union select * from s_c;
请参阅中的一些示例,可以随意询问任何让您感到困惑的问题。您看过吗?也许这会简化事情。欢迎加入TiDB社区Slack频道,与TiDB社区互动并获得更快的回复~Thank@Littlefall。我看到了flink tidb rdw,但我会检查它。你介意添加一个微信吗(我想我以前给你发过邮件)?是的!很抱歉这么晚才见到你,我刚刚给你发了一个朋友请求。