패키지 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 ( "링거. 소품을 반환; } }