Flink 1.10.0应用场景,kakfa->flink->kafka/mysql/es/hive/hdfs

本文介绍了Flink 1.10.0的应用场景,包括从Kafka到Flink再到Kafka、MySQL、Elasticsearch、Hive和HDFS的数据处理流程,并提供了相关链接和Flink SQL示例,展示了如何创建数据源和数据接收器,以及进行数据聚合操作。
Flink 1.17中,要从Kafka读取数据,经过处理后再输出到Kafka,可按以下步骤操作: ### 1. 引入依赖 需要在项目中引入Kafka连接器的依赖。在Maven项目的`pom.xml`文件中添加如下依赖: ```xml <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-kafka</artifactId> <version>1.17.0</version> </dependency> ``` ### 2.Kafka读取数据 Flink官方提供了连接工具`flink-connector-kafka`,可以使用`FlinkKafkaConsumer`或新的`KafkaSource`来读取Kafka数据。以下是使用`KafkaSource`的示例代码: ```java import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.api.common.serialization.SimpleStringSchema; import org.apache.flink.connector.kafka.source.KafkaSource; import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; public class SourceKafka { public static void main(String[] args) throws Exception { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); KafkaSource<String> kafkaSource = KafkaSource.<String>builder() .setBootstrapServers("hadoop102:9092") .setTopics("topic_1") .setGroupId("atguigu") .setStartingOffsets(OffsetsInitializer.latest()) .setValueOnlyDeserializer(new SimpleStringSchema()) .build(); DataStreamSource<String> stream = env.fromSource(kafkaSource, WatermarkStrategy.noWatermarks(), "kafka-source"); } } ``` ### 3. 数据处理 在获取到Kafka数据流后,可以对数据进行各种处理,例如简单的映射操作: ```java import org.apache.flink.streaming.api.datastream.DataStream; // ... 前面的代码 ... DataStream<String> processedStream = stream.map(data -> data.toUpperCase()); ``` ### 4. 将处理后的数据输出到Kafka 使用`KafkaSink`将处理后的数据输出到Kafka。示例代码如下: ```java import org.apache.flink.connector.kafka.sink.KafkaRecordSerializationSchema; import org.apache.flink.connector.kafka.sink.KafkaSink; import org.apache.kafka.clients.producer.ProducerRecord; import javax.annotation.Nullable; import java.nio.charset.StandardCharsets; // ... 前面的代码 ... KafkaRecordSerializationSchema<String> serializationSchema = new KafkaRecordSerializationSchema<String>() { @Override public ProducerRecord<byte[], byte[]> serialize(String element, @Nullable Long timestamp) { return new ProducerRecord<>("output_topic", element.getBytes(StandardCharsets.UTF_8)); } }; KafkaSink<String> kafkaSink = KafkaSink.<String>builder() .setBootstrapServers("hadoop102:9092") .setRecordSerializer(serializationSchema) .build(); processedStream.sinkTo(kafkaSink); env.execute(); ``` ### 完整代码示例 ```java import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.api.common.serialization.SimpleStringSchema; import org.apache.flink.connector.kafka.sink.KafkaRecordSerializationSchema; import org.apache.flink.connector.kafka.sink.KafkaSink; import org.apache.flink.connector.kafka.source.KafkaSource; import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.kafka.clients.producer.ProducerRecord; import javax.annotation.Nullable; import java.nio.charset.StandardCharsets; public class FlinkKafkaExample { public static void main(String[] args) throws Exception { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); KafkaSource<String> kafkaSource = KafkaSource.<String>builder() .setBootstrapServers("hadoop102:9092") .setTopics("topic_1") .setGroupId("atguigu") .setStartingOffsets(OffsetsInitializer.latest()) .setValueOnlyDeserializer(new SimpleStringSchema()) .build(); DataStreamSource<String> stream = env.fromSource(kafkaSource, WatermarkStrategy.noWatermarks(), "kafka-source"); DataStream<String> processedStream = stream.map(data -> data.toUpperCase()); KafkaRecordSerializationSchema<String> serializationSchema = new KafkaRecordSerializationSchema<String>() { @Override public ProducerRecord<byte[], byte[]> serialize(String element, @Nullable Long timestamp) { return new ProducerRecord<>("output_topic", element.getBytes(StandardCharsets.UTF_8)); } }; KafkaSink<String> kafkaSink = KafkaSink.<String>builder() .setBootstrapServers("hadoop102:9092") .setRecordSerializer(serializationSchema) .build(); processedStream.sinkTo(kafkaSink); env.execute(); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值