FLINK + 카프카 실시간 계산 단어 수를 달성

FLINK 설명 :

FLINK 데이터와 배치 데이터 스트리밍을위한 분산 처리 엔진입니다. 그것은 주로 자바 코드에 의해 구현됩니다. 현재 주로 오픈 소스 커뮤니티와 개발의 기여에 의존하고 있습니다. FLINK, 그것은 데이터, 배치 데이터 스트림을 스트리밍하는 극단적 인 데이터의 단지 특별한 경우에만입니다 처리해야하는 주요 장면하십시오. 여전히 즉, FLINK 모든 작업이 가장 큰 특징이다 스트림으로 처리됩니다. FLINK 지역의 빠른 반복 루프 반복하고 일부 작업을 지원할 수 있습니다.

FLINK 기능 :

: FLINK 스트림 처리 오픈 소스 프레임 워크를 배포
1> 데이터 소스 또는 데이터가 늦게 도착하더라도 무질서하다,뿐만 아니라 결과의 정확성을 유지하기 위해.
2> 및 내결함성 상태로, 완벽하게 오류를 복구하고, 될 수 있습니다. 정확히 한 번 지키는
3> 대규모 분산
널리 실시간 (깜박임 알리 실시간 2-11 회전율이 FLINK에서 변환의 사용을 기반으로) 현장 컴퓨팅을 사용> 4

FLINK 상태를 갖는 프로그램이 이미 처리 된 데이터를 유지할 수 있다는 것을 의미한다; FLINK 하나만 상태 시맨틱 연산을 보장 할 수
FLINK 스트리밍 이벤트 시간 윈도우 의미론 FLINK 유연한 시간 기반 윈도우 계수 데이터 기반 윈도우 또는 세션을 지원하는 지원 ;
FLINK 내결함성 경량이며, 동시에 높은 처리량을 유지하고 제공하는 일관성을 보장 한 번만, FLINK, 장애로부터 데이터 손실을 복구하기 위해 시스템을 허용,
FLINK 높은 처리량과 낮은 지연 할 수있는,
FLINK 지점은 버전을 제공합니다 저장 제어 메커니즘은 기록 데이터의 적용 또는 재 처리가 손실 최소 중단되지 업데이트 할 수있다.

2. 카프카

카프카 소개

카프카는 스칼라와 자바로 작성된 아파치 소프트웨어 재단, 오픈 소스 스트림 프로세싱 플랫폼에 의해 개발되었다. 카프카는 모든 액션 스트리밍 데이터 소비자 규모의 사이트를 처리 할 수있는 분산 발행 - 구독 메시징 시스템의 높은 처리량이다. 이 작업 (웹 브라우징, 검색 및 기타 사용자 조치는) 현대 네트워크에서 많은 사회적 기능의 핵심 요소이다. 인해 필요한 처리량 통상 이러한 데이터는 중합 공정 로그 및 로그에 의해 달성된다. 실시간 처리 제한 로그 데이터 시스템의 분석 하둡과 같은 및 오프라인처럼,하지만 필요이 가능한 솔루션입니다. 카프카의 목적은 실시간 정보를 제공하기 위해뿐만 아니라 클러스터를 통해 온라인 및 오프라인 메시징을 통합하는 병렬 로딩 메커니즘을 하둡하는 것입니다.

카프카의 특성

: 카프카는 다음과 같은 특징이있다 게시 구독 메시징 시스템을 분산 높은 처리량이다
영구 디스크 데이터 구조에 의해 제공되는 1> 메시지를 메시지에 대해이 구조는 TB에 저장된 번호가 오랜 시간 안정적으로 유지 될 수있다하더라도 성능을 제공합니다.
2> 높은 처리량도 매우 일반적인 하드웨어 카프카는 초당 수백만 개의 메시지를 지원할 수 있습니다.
3> 카프카에 의해 파티션 메시징 서버에 대한 지원 및 기계 클러스터의 소비.
4>. 하둡 지원 병렬 데이터 로딩.

카프카의 설치 구성 및 기본 사용법

지역 소비 카프카 데이터 단어 수를 달성하기 위해, 그래서 너무 많이 카프카 구성을 수행 할 필요가 없습니다, 아파치 공식 웹 사이트 감압에서 설치 패키지를 다운로드하기 때문에이 블로그에 FLINK 직접 사용할 수 있습니다
우리가 테스트라는 주제 만들 경우
입력 데이터 스트림 프로듀서 :

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

소비자에서 제조자로부터 입력 데이터 스트림을 모니터링 :

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

1> 받는다는 프로젝트를 만듭니다

<dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-clients -->
        <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-clients_2.11</artifactId> <version>1.0.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-streaming-java --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_2.11</artifactId> <version>1.0.0</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-java --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-kafka-0.8_2.11</artifactId> <version>1.0.0</version> </dependency> </dependencies>
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

4> 상기 데이터 스트림을 모니터링하는 시간 간격을 설정 (공식 상태라고 검문소)

env.enableCheckpointing(1000);

5>. 카프카와 IP 및 포트 사육사를 구성

Properties properties = new Properties();
properties.setProperty("bootstrap.servers", "192.168.1.20:9092");
properties.setProperty("zookeeper.connect", "192.168.1.20:2181"); properties.setProperty("group.id", "test");
FlinkKafkaConsumer08<String> myConsumer = new FlinkKafkaConsumer08<String>("test", new SimpleStringSchema(),properties);

FLINK의 데이터 스트림 타입으로 7>. 카프카의 데이터

DataStream<String> stream = env.addSource(myConsumer);

8> 실시 예 및 계산 모델 출력

DataStream<Tuple2<String, Integer>> counts = stream.flatMap(new LineSplitter()).keyBy(0).sum(1);

counts.print();

상세한 로직 코드 계산 모델

public static final class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> { private static final long serialVersionUID = 1L; public void flatMap(String value, Collector<Tuple2<String, Integer>> out) { String[] tokens = value.toLowerCase().split("\\W+"); for (String token : tokens) { if (token.length() > 0) { out.collect(new Tuple2<String, Integer>(token, 1)); } } } }

4. 확인

1>. 카프카 제조자 입력

그 결과 한 번 2>. FLINK 클라이언트

전체 코드

package com.scn;

import java.util.Properties;

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer08; import org.apache.flink.streaming.util.serialization.SimpleStringSchema; import org.apache.flink.util.Collector; public class FilnkCostKafka { public static void main(String[] args) throws Exception { final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.enableCheckpointing(1000); Properties properties = new Properties(); properties.setProperty("bootstrap.servers", "192.168.1.20:9092"); properties.setProperty("zookeeper.connect", "192.168.1.20:2181"); properties.setProperty("group.id", "test"); FlinkKafkaConsumer08<String> myConsumer = new FlinkKafkaConsumer08<String>("test", new SimpleStringSchema(), properties); DataStream<String> stream = env.addSource(myConsumer); DataStream<Tuple2<String, Integer>> counts = stream.flatMap(new LineSplitter()).keyBy(0).sum(1); counts.print(); env.execute("WordCount from Kafka data"); } public static final class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> { private static final long serialVersionUID = 1L; public void flatMap(String value, Collector<Tuple2<String, Integer>> out) { String[] tokens = value.toLowerCase().split("\\W+"); for (String token : tokens) { if (token.length() > 0) { out.collect(new Tuple2<String, Integer>(token, 1)); } } } } }

추천

출처www.cnblogs.com/ExMan/p/11285143.html