dogplays 2023-06-16 11:18 采纳率: 0%
浏览 29

Flink 接收不到Kafka数据

Kafka集群在虚拟机上,能正常通信能互相ping本地consumer消费者程序正常消费,flink程序不能消费不能打印数据,也没有错误提示

import org.apache.flink.api.common.eventtime.WatermarkStrategy;
import org.apache.flink.api.common.serialization.SimpleStringSchema;
import org.apache.flink.api.common.typeinfo.TypeInformation;
import org.apache.flink.connector.kafka.source.KafkaSource;
import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer;
import org.apache.flink.streaming.api.CheckpointingMode;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;


public class Cityweather {
    public static void main(String[] args) throws Exception {
        // 创建流执行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        // 设置checkpoint
        env.enableCheckpointing(1000, CheckpointingMode.AT_LEAST_ONCE);
        env.getCheckpointConfig().setMinPauseBetweenCheckpoints(3000);

        // 创建 KafkaSource
        KafkaSource<String> kafkaSource = KafkaSource.<String>builder()
                .setBootstrapServers("hadoop100:9092")
                .setTopics("POC_test")
                .setGroupId("my-groupsdads")
                .setStartingOffsets(OffsetsInitializer.earliest())
                .setValueOnlyDeserializer(new SimpleStringSchema())
                .build();

        // 从 Kafka 读取数据并创建 DataStream
        DataStreamSource<String> weathertest = env.fromSource(kafkaSource, WatermarkStrategy.noWatermarks(), "weather_test");

//        System.out.println(weatherTest);
        weathertest.map(value -> {
            System.out.println(value);
            Thread.sleep(10000);
            return value;
        });

        // 打印数据流
//        weathertest.print();

        // 执行任务
        env.execute("CityWeather");
    }
}


  • 写回答

2条回答 默认 最新

  • 微笑面对bug 2023-06-16 11:25
    关注

    从您提供的代码片段来看,有几个问题可能导致您的Flink程序无法正常消费和打印数据:

    1. 您在代码中创建了KafkaSource,但没有将其连接到数据流。在创建KafkaSource后,您需要将其作为参数传递给env.fromSource()方法,以便将其连接到数据流。修改您的代码如下:
    // 从 Kafka 读取数据并创建 DataStream
    DataStreamSource<String> weathertest = env.fromSource(kafkaSource, WatermarkStrategy.noWatermarks(), "weather_test");
    
    1. 您的map()操作没有连接到下游操作或输出。在Flink中,转换操作(例如map())是惰性执行的,只有当您将其连接到下游操作(例如print())时,它才会被执行。您可以在map()操作后添加.print()方法,以打印数据流中的结果,或者将map()操作的结果连接到其他下游操作。修改您的代码如下:
    weathertest.map(value -> {
        System.out.println(value);
        Thread.sleep(10000);
        return value;
    }).print(); // 将结果打印出来
    
    1. 您没有调用execute()方法来触发任务执行。在您的代码末尾,添加env.execute("CityWeather");以启动任务执行。修改您的代码如下:
    // 执行任务
    env.execute("CityWeather");
    

    请确保在代码中添加了上述修改,然后重新运行您的程序,看看是否能够正常消费和打印数据。

    评论

报告相同问题?

问题事件

  • 创建了问题 6月16日

悬赏问题

  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真
  • ¥15 关于#c语言#的问题,请各位专家解答!