flink sql 13.2 读取与写入数据库的报错(踩坑)

flink sql sink mysql 没有数据写入或数据写入中文乱码或报useSSL

connector 如下:

'connector' = 'jdbc',
'url' = 'jdbc:mysql://localhost:3306/dbname?characterEncoding=utf8&useSSL=false',
'table-name' = 'tablename',
// 'driver' = 'com.mysql.cj.jdbc.Driver',
'username' = 'username',
'password' = 'pwd'

1、useSSL=false:解决 ssl 问题
2、characterEncoding=utf8:解决中文乱码问题
3、驱动不一致会导数数据无法写入,注释驱动,让flink自动推断即可

flink sql source mysql 任务执行正常没有任何报错信息(构建 Flink LookUp 表 的踩坑历程)

mysql 建表语句

CREATE TABLE `sku_test_upsert` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '库存id(itemID)',
  `price` decimal(10,0) DEFAULT NULL COMMENT '价格',
  `sku_name` varchar(200) DEFAULT NULL COMMENT 'sku名称',
  `category3_id` bigint(20) DEFAULT NULL COMMENT '三级分类id(冗余)',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='库存单元表'

flink sql source jdbc 错误的建表语句

CREATE TABLE sku_test_upsert(
id bigint ,
price bigint  ,
sku_name STRING ,
category3_id bigint, 
PRIMARY KEY(id) NOT ENFORCED
) WITH (
'connector' = 'jdbc',
'url' = 'jdbc:mysql://localhost:3306/dbname?useSSL=false',
'table-name' = 'sku_test_upsert',
'username' = 'username',
'password' = 'pwd'
)

错误的地方是price 字段的数据类型是bigint ,要改成decimal(10,2) 类型才能正常查询数据,最坑的是没有任何的报错信息提示
备注:要非常关注字段的数据类型映射是否正确,这个可能会影响能否查询数据的关键,没提示任何报错,此点非常坑

flink sql source jdbc 正确的建表语句:

CREATE TABLE sku_test_upsert(
id bigint ,
price decimal(10,2) ,
sku_name STRING ,
category3_id bigint, 
PRIMARY KEY(id) NOT ENFORCED
) WITH (
'connector' = 'jdbc',
'url' = 'jdbc:mysql://localhost:3306/dbname?useSSL=false',
'table-name' = 'sku_test_upsert',
'username' = 'username',
'password' = 'pwd'
)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Flink实时读取Kafka并将数据写入HBase数据库,您可以使用Flink的Kafka源(FlinkKafkaConsumer)和HBase的TableSink(HBaseTableSink)。以下是一个示例代码片段,展示如何实现这一功能: ``` val env = StreamExecutionEnvironment.getExecutionEnvironment() // 设置Kafka消费者配置 val kafkaProps = new Properties() kafkaProps.setProperty("bootstrap.servers", "localhost:9092") kafkaProps.setProperty("group.id", "flink-kafka-hbase") // 创建Kafka数据流 val kafkaConsumer = new FlinkKafkaConsumer[String]("topic-name", new SimpleStringSchema(), kafkaProps) val kafkaStream = env.addSource(kafkaConsumer) // 将Kafka数据流转换为HBase数据流 val hbaseStream = kafkaStream.map(new MapFunction[String, Put]() { override def map(value: String): Put = { val put = new Put(Bytes.toBytes("row key")) put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("column"), Bytes.toBytes(value)) put } }) // 设置HBase表格的配置 val hbaseConfig = HBaseConfiguration.create() hbaseConfig.set(TableOutputFormat.OUTPUT_TABLE, "table-name") hbaseConfig.set("hbase.zookeeper.quorum", "localhost") hbaseConfig.set("hbase.zookeeper.property.clientPort", "2181") // 将HBase数据流写入表格 val hbaseSink = new HBaseTableSink(hbaseConfig) hbaseStream.addSink(hbaseSink) // 执行Flink任务 env.execute("Read from Kafka and write to HBase") ``` 在上面的代码中,我们首先创建了一个FlinkKafkaConsumer对象并使用它创建了一个Kafka数据流。接下来,我们将Kafka数据流转换为HBase数据流,并在每个记录上创建一个Put对象,该对象包含HBase表格的行键和列。 然后,我们设置了HBase表格的配置,并使用HBaseTableSink将HBase数据流写入表格。最后,我们通过调用env.execute()方法来执行Flink任务。 请注意,在实际使用中,您需要根据您的特定情况对代码进行相应的修改。例如,您需要修改Kafka主题的名称、HBase表格的名称和行键等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值