代码如下
private static final ArrayList<String> createTTLTopics = Lists.newArrayList("real-time-screen-robot-work-count", "medical-device-status-history", "deviceStatusChange", "flink-test");
public static DataStreamSource<String> getNewKafkaSource(StreamExecutionEnvironment env,
JSONObject kafka,
String topic,
String groupId,
String sourceName,
OffsetsInitializer offsets) {
Properties adminProperties = new Properties();
adminProperties.setProperty(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, kafka.getString("boot_strap"));
AdminClient adminClient = AdminClient.create(adminProperties);
try {
if (!adminClient.listTopics().names().get().contains(topic)) {
NewTopic newTopic = new NewTopic(topic, 10, (short) 1);
if (createTTLTopics.contains(topic)){
newTopic.configs(Collections.singletonMap("retention.ms", "86400000"));
}
adminClient.createTopics(Collections.singletonList(newTopic)).all().get();
LOG.warn("一个 {} 发生. 创建了一个名为:{}的topic.", "warn",topic );
}
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
KafkaSource<String> source = KafkaSource.<String>builder()
.setProperty("partition.discovery.interval.ms", "60000")
.setClientIdPrefix(UUID.randomUUID().toString())
.setBootstrapServers(kafka.getString("boot_strap"))
.setTopics(topic)
.setGroupId(groupId)
.setValueOnlyDeserializer(new SimpleStringSchema())
.setStartingOffsets(offsets)
.build();
return env.fromSource(source, WatermarkStrategy.noWatermarks(), sourceName);
}