flink+kafka实例

1、kafka集群搭建

zookeeper集群以及kafka集群搭建详见博客:kafka集群搭建。只是本文将kafka版本升级为0.11.0.3。

2、java工程部署

java maven 工程大部署详见基于flink实现的worldcount,本位只需要讲maven 工程pom配置文件增加 kafka 连接器
在这里插入图片描述

3、创建主类 FlinkReadKafka

代码如下:

public class FlinkReadKafka {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env=StreamExecutionEnvironment.getExecutionEnvironment();
        Properties properties=new Properties();
        properties.setProperty("bootstrap.servers","node1:9092,node2:9092,node3:9092");
        properties.setProperty("group.id", "mykafkaxxx");
        FlinkKafkaConsumer011 kafka=new FlinkKafkaConsumer011("FlinkTopic",new SimpleStringSchema(),properties);
        DataStreamSource dss = env.addSource(kafka);
        SingleOutputStreamOperator flatMap = dss.flatMap(new FlatMapFunction<String, String>() {
            @Override
            public void flatMap(String value, Collector<String> out) throws Exception {
                String[] split = value.split(" ");
                for (String word : split) {
                    out.collect(word);
                }
            }
        });
        SingleOutputStreamOperator map = flatMap.map(new MapFunction<String, Tuple2<String, Integer>>() {
            @Override
            public Tuple2<String, Integer> map(String word) throws Exception {
                return new Tuple2<>(word, 1);
            }
        });
        WindowedStream<Tuple2<String,Integer>,Tuple,TimeWindow> windowedStream = map.keyBy(0).timeWindow(Time.seconds(5));
        SingleOutputStreamOperator<Tuple2<String,Integer>>sum=windowedStream.sum(1);
        FlinkKafkaProducer011<String> sink = new FlinkKafkaProducer011<>("FlinkResult", new SimpleStringSchema(), properties);
        sum.map(new MapFunction<Tuple2<String,Integer>, String>() {

            @Override
            public String map(Tuple2<String, Integer> tp2) throws Exception {
                return tp2.f0+"="+tp2.f1;
            }
        }).addSink(sink);
        env.execute();

    }
}

4、启动 zk

在node1,node2,node3上

cd /opt/app/zookeeper-3.4.6/conf
 zkServer.sh  start

5、启动 kafka 集群

在node1,node2,node3上

cd /opt/app/kafka_2.10-0.9.0.1/
 kafka-server-start.sh config/server.properties

6、创建topic

创建 source topic

kafka-topics.sh --create  --partitions 3  -replication-factor 2 --topic Flink_Topic --zookeeper node1:2181,node2:2181,node3:2181

创建 sink topic

kafka-topics.sh --create  --partitions 3  -replication-factor 2 --topic Flink_Result --zookeeper node1:2181,node2:2181,node3:2181

在这里插入图片描述

7、运行代码

在这里插入图片描述

8、创建生产者和消费者

在node1 上创建生产者

kafka-console-producer.sh   --broker-list  node1:9092,node2:9092,node3:9092 --topic Flink_Topic

在node2 上创建 消费者

kafka-console-consumer.sh  --bootstrap-server node1:9092,node2:9092,node3:9092 --topic Flink_Result

生产者上输入字符串,可以看到 消费者上显示结果为经过 FlinkReadKafka处理后的结果
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Flink是一个开源的流处理框架,而Kafka是一个分布式消息队列系统。在Flink中使用Kafka的Java API可以实现将Kafka中的数据作为输入源或将处理结果输出到Kafka中。 在Flink中使用Kafka Java API的步骤通常如下: 1. 引入Kafka的依赖:首先需要将Kafka的Java API的依赖添加到Flink的工程中。 2. 创建Kafka消费者:使用Kafka的Java API创建一个消费者实例,可以指定消费者的一些配置如Kafka的地址、消费者组ID等。通过调用消费者的`assign()`方法或`subscribe()`方法来指定要消费的Kafka主题。 3. 创建Flink的DataStream:使用Flink的DataStream API实例化一个用于接收Kafka数据的DataStream对象。可以使用`addSource()`方法来将Kafka消费者作为数据源。可以在创建DataStream时指定Kafka消息的反序列化方式、数据类型等。 4. 执行数据处理逻辑:可以在DataStream上应用各种Flink的算子,如map、filter、reduce等,对Kafka中的数据进行处理。 5. 创建Kafka生产者:使用Kafka的Java API创建一个生产者实例,可以指定生产者的一些配置。通过调用生产者的`send()`方法将处理后的结果数据发送到Kafka中。 6. 提交任务并启动Flink作业:将处理逻辑应用到Flink的任务上,并将任务提交给Flink集群进行执行。 通过以上步骤,就可以在Flink中使用Kafka的Java API进行数据的输入和输出。这种方式将Kafka作为Flink的一个数据源或数据目的,使得数据可以在流处理中被实时地处理和分析。同时,由于Kafka的分布式特性,也可以保证数据的可靠性和高吞吐量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜菜的中年程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值