Flink项目开发记录之kafka获取数据

Flink项目开发记录

项目背景:使用的jar包版本: flink1.9.0 、kafka 2.0.1、scala 2.11.11


            org.apache.flink
            flink-scala_2.11
            ${flink.version}
            
                
                    org.scala-lang
                    scala-compiler
                
                
                    org.scala-lang
                    scala-library
                
                
                    org.scala-lang
                    scala-reflect
                
            
        

            org.scala-lang
            scala-compiler
            2.11.11
            compile
        
        
        
            org.apache.flink
            flink-streaming-scala_2.11
            ${flink.version}
            
                
                    org.scala-lang
                    scala-compiler
                
            
        
        
        
            org.apache.flink
            flink-connector-kafka_2.11
            ${flink.version}
        

主要是排除了一些scala的依赖,否则会产生jar包冲突,会报
scala的reflect包丢失等错误,主要原因便是这个scala-compiler包 切记

原先使用的是flink1.7.0,因为akka的timeout原因,1.7版本不支持手动设置akka超时时间,导致集群一直起不来,所以升级了flink。顺带将kafka也配套到了2.0.1

kafka在升级到2.0.1之后,对于flink的生产者 FlinkKafkaProducer类的构造函数,多了自己的KafkaSerializationSchema,原先的KeyedSerializationSchema与SimpleStringSchema 都标记了过时,
项目中使用的是KeyedSerializationSchemaWrapper 包装了SimpleStringSchema,查看了一下源码之后,发现KafkaSerializationSchema并没有实现自己的类,也就是说需要自己去实现流的序列化,所以目前也就将就着使用过时的方法了,而FlinkKafkaConsumer则还是没用标记过时 。

从kafka中获取数据的代码如下:

    val kafkaProperties = new Properties();
    kafkaProperties.put("bootstrap.servers",props.getProperty("kafka.brokers"))
    kafkaProperties.put("group.id",props.getProperty("group.id"))
    val dataTopic = props.getProperty("kafka.topics.data")
    val kafkaSource = new FlinkKafkaConsumer[String](dataTopic,new SimpleStringSchema(),kafkaProperties)
    val data = env.addSource(kafkaSource)

这样就可以接着流进行处理了

你可能感兴趣的:(flink,kafka,flink,kafka)