카프카의 생산 뉴스, 스트리밍 소비

패키지 com.bd.useranalysis.spark.streaming.kafka2es; 

수입 com.alibaba.fastjson.JSON; 
수입 com.bd.useranalysis.common.config.ConfigUtil; 
수입 com.bd.useranalysis.common.project.datatype.DataTypeProperties; 
수입 org.apache.kafka.clients.consumer.ConsumerRecord; 
수입 org.apache.kafka.clients.producer.ProducerConfig; 
수입 org.apache.kafka.common.serialization.StringDeserializer; 
수입 org.apache.spark.SparkConf; 
수입 org.apache.spark.api.java.JavaRDD; 
수입 org.apache.spark.api.java.JavaSparkContext; 
수입 org.apache.spark.api.java.function.Function; 
수입 org.apache.spark.api.java.function.VoidFunction; 
수입 org.apache.spark.streaming.Durations;
수입 org.apache.spark.streaming.api.java.JavaDStream;
수입 org.apache.spark.streaming.api.java.JavaInputDStream; 
수입 org.apache.spark.streaming.api.java.JavaStreamingContext; 
수입 org.apache.spark.streaming.kafka010. *; 

java.util의를 가져옵니다. *; 

공용 클래스 Kafka2EsJava { 

    속성 속성 = ConfigUtil.getInstance ()의 getProperties ( "카프카 / kafka-server-config.properties."); 

    정적 인 <문자열>있는 dataType DataTypeProperties.dataTypeMap.keySet = (); 

    공공 정적 무효 메인 (문자열 []에 args) {예외 : InterruptedException 발생 

        SparkConf sparkConf = 새로운 SparkConf ()을 setAppName ( "sparkstreaming_kafka2es")를 setMaster ( "로컬 [2]")..; 
        JavaStreamingContext의 JSS = 새로운 JavaStreamingContext (JSC, 재생 시간.
        JavaSparkContext JSC = 새로운 JavaSparkContext (sparkConf);
        jsc.setLogLevel ( "WARN"); 

        지도 <문자열, 개체> kafkaParams = 새로운 HashMap의 <> (); 
        kafkaParams.put ( "bootstrap.servers", "quyf : 9092"); 
        kafkaParams.put ( "key.deserializer", StringDeserializer.class); 
        kafkaParams.put ( "value.deserializer", StringDeserializer.class); 
        kafkaParams.put ( "group.id", "test_20190815"); 
        kafkaParams.put ( "auto.offset.reset", "최신"); 
        kafkaParams.put ( "enable.auto.commit", TRUE); 
        목록 <문자열> topicList = Arrays.asList ( "테스트", "TEST2"); 
        JavaInputDStream <ConsumerRecord <문자열, 문자열 >> 스트림 = KafkaUtils.createDirectStream (JSS,
 
        JavaDStream <HashMap의 <문자열, 문자열 >> recordDS = stream.map (신기능 <ConsumerRecord <문자열, 문자열>의 HashMap <문자열, 문자열 >> () { 

            @Override 
            공공의 HashMap <문자열 문자열> 통화 (ConsumerRecord <문자열, 문자열> 기록) {예외 발생 
                ; //System.out.println("consumer ==> "+ record.value ()) 
                JSON.parseObject를 반환 (record.value (), 해시 MAP. 클래스); 
            } 
        }); 

        {(있는 dataType 문자열 형)에 대한 
            recordDS.filter (새 기능 <의 HashMap <문자열, 문자열>, 부울> () { 
                @Override
                공공 부울 호출 (의 HashMap <문자열, 문자열> 된 resultMap)이 예외를 throw { 
                    ( "테이블") resultMap.get를 반환 등호 (유형).; 
                } 
            }). foreachRDD는 (새로운 VoidFunction <JavaRDD <HashMap의 <문자열, 문자열 >>> () { 
                @Override 
                공개 무효 호출 (JavaRDD <HashMap의 <문자열, 문자열 >> mapJavaRDD)는 예외 발생 { 
                   mapJavaRDD.foreach (새 VoidFunction <해시 MAP <문자열, 문자열 >> ()는 { 
                       @Override 
                       공개 무효 호출 (HashMap의 <문자열, 문자열> stringStringHashMap)는 예외 발생 { 
                           에서 System.out.println (stringStringHashMap.toString ());
                   }); 
                } 
            }); 
        } 

        jss.start (); 
        jss.awaitTermination (); 

    } 
}

  

공용 클래스 GenKafkaData { 

    공공 정적 무효 메인 (문자열 []에 args)는 예외 {던졌습니다 
        (새을 FileReader (목록 <문자열> 라인 = IOUtils.readLines 
                (새 파일 "E : \\ 위챗 \\ wechat_source1_1111153.txt"))); 

        제조자 <문자열, 문자열> 제조자 = getProducer (); 

        ArrayList를 <문자열> = DataTypeProperties.dataTypeMap.get 열 ( "위챗"); 
        지도 <문자열, 문자열> 데이터 맵 = 새의 HashMap <> (); 
        dataMap.put ( "테이블", "위챗"); 
        (문자열 라인 : 라인)에 대한 { 
            문자열 [] = line.split 필드 ( "\의 t"); 
            대해 INT (I = 0; I <fields.length은, 내가 ++) { 
                dataMap.put (columns.get (I) 
            }
            INT 인덱스 = 0;  
    공공 정적 생산국 <문자열, 문자열> getProducer () {
                문자열 lineRecord JSON.toJSONString = (데이터 맵); 
                producer.send (새 ProducerRecord <> ( "TEST2"NULL, lineRecord)); 
                Thread.sleep를 (1000); 
                인덱스 ++; 
                에서 System.out.println는 ( "보내기 ->"+ lineRecord); 
                (인덱스 == 10) {경우 
                    파괴; 
                } 
            } 
            //System.out.println("send->"+lineRecord); 
            //StringProducer.producer("test "lineRecord); 
        } 
    }

        제조자 <문자열, 문자열> 제조자 = 새로운 KafkaProducer <문자열, 문자열> (createProducerProperties ()); 
        프로듀서를 반환; 
    } 

    개인 정적 속성 createProducerProperties () { 
        등록 소품 = 새 속성 (); 
// props.put ( "key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); 
// props.put ( "value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); 
        props.put ( "key.serializer", StringSerializer.class); 
        props.put ( "value.serializer", StringSerializer.class); 
        props.put ( "bootstrap.servers", "quyf : 9092"); 
        props.put ( "링거.
        소품을 반환; 
    } 
}

  

추천

출처www.cnblogs.com/quyf/p/11361080.html