掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
本文轉(zhuǎn)載自微信公眾號(hào)「肌肉碼農(nóng)」,作者鄒學(xué)。轉(zhuǎn)載本文請(qǐng)聯(lián)系肌肉碼農(nóng)公眾號(hào)。

目前成都創(chuàng)新互聯(lián)已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、鐵西網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
基于bahir-flink二次開發(fā),使它支持SQL直接定義寫入redis,用戶通過DDL指定自己需要保存的字段。
命令行執(zhí)行 mvn package -DskipTests=true打包后,將生成的包flink-connector-redis_2.12-1.11.1.jar引入flink lib中即可,無需其它設(shè)置。
相對(duì)上一個(gè)版本簡(jiǎn)化了參數(shù)設(shè)置,思路更清晰,上一版本字段的值會(huì)根據(jù)主鍵等條件來自動(dòng)生成,這要求使用者需要了解相關(guān)規(guī)則,有一定的學(xué)習(xí)成本并且容易埋坑,重構(gòu)后字段的值由用戶在DDL中顯示地指定,如下:
- 'key-column'='username','value-column'='passport',' //直接指定字段名
取消了必須有主鍵的限制,使用更簡(jiǎn)單,如果有多個(gè)字段組合成key或者value,需要用戶在DML中使用concat_ws等方式組裝,不再是插件在后臺(tái)用不可見字符拼裝。
示例代碼路徑: src/test/java/org.apache.flink.streaming.connectors.redis.table.SQLInsertTest.java
set示例,相當(dāng)于redis命令: set test test11
- StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
- EnvironmentSettings environmentSettings = EnvironmentSettings.newInstance().useBlinkPlanner().inStreamingMode().build();
- StreamTableEnvironment tEnv = StreamTableEnvironment.create(env, environmentSettings);
- String ddl = "create table sink_redis(username VARCHAR, passport VARCHAR) with ( 'connector'='redis', " +
- "'host'='10.11.80.147','port'='7001', 'redis-mode'='single','password'='******','key-column'='username','value-column'='passport','command'='set')" ;
- tEnv.executeSql(ddl);
- String sql = " insert into sink_redis select * from (values ('test', 'test11'))";
- TableResult tableResult = tEnv.executeSql(sql);
- tableResult.getJobClient().get()
- .getJobExecutionResult()
- .get();
示例代碼路徑:
src/test/java/org.apache.flink.streaming.connectors.redis.datastream.DataStreamInsertTest.java
hset示例,相當(dāng)于redis命令:hset tom math 150
- Configuration configuration = new Configuration();
- configuration.setString(RedisOptions.KEY_COLUMN, "name");
- configuration.setString(RedisOptions.FIELD_COLUMN, "subject"); //對(duì)應(yīng)hash的field、 sorted set的score
- configuration.setString(RedisOptions.VALUE_COLUMN, "score");
- configuration.setString(REDIS_MODE, REDIS_CLUSTER);
- configuration.setString(REDIS_COMMAND, RedisCommand.HSET.name());
- RedisMapper redisMapper = RedisHandlerServices
- .findRedisHandler(RedisMapperHandler.class, configuration.toMap())
- .createRedisMapper(configuration);
- StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
- GenericRowData genericRowData = new GenericRowData(3);
- genericRowData.setField(0, "tom");
- genericRowData.setField(1, "math");
- genericRowData.setField(2, "150");
- DataStream
dataStream = env.fromElements(genericRowData); - TableSchema tableSchema = new TableSchema.Builder() .field("name", DataTypes.STRING().notNull()).field("subject", DataTypes.STRING()).field("score", DataTypes.INT()).build();
- FlinkJedisConfigBase conf = getLocalRedisClusterConfig();
- RedisSink redisSink = new RedisSink<>(conf, redisMapper, tableSchema);
- dataStream.addSink(redisSink);
- env.execute("RedisSinkTest");

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流