2017-09-20 6 views
0

Apache Kafka에서 읽는 애플리케이션을 계획하고 (잠재적으로 시간이 많이 걸리는) 처리 후에는 데이터를 데이터베이스에 저장합니다.Apache Spark/Apache Flink로 스케일링

내 경우는 메시지가 아니라 스트림이지만 확장성에 대한 것입니다. Spark 또는 Flink에 연결하는 것에 대해 생각하고 있지만 이러한 크기 조정 방법을 이해할 수는 없습니다. 내 앱, Spark/Flink의 일부가 읽었을 때 Kafka의 데이터를 읽고 종료하거나 계속 읽는 중입니까?

Spark/Flink는 처리량을 개선하기 위해 내 앱을 더 많이 생성해야한다고 어떻게 결정할 것인가?

감사합니다!

+0

Spark에는 동적 할당이 있습니다. 기억할 때까지 마이크로 배치 간격이 마이크로 배치 간격에 가까워 질 때 새로운 실행 프로그램을 만듭니다. –

+0

저는이 두 가지를 처음 접했습니다 - 어떻게하면 내 앱이 어떻게 동작해야합니까? 카프카에서 한 번만 읽고 출구에서해야합니까? 대기열에 더 많은 데이터가있는 경우 읽을 수있는 새로운 작업을 생성해야한다는 것을 Spark/Flink에서 어떻게 알 수 있습니까? – estoy

+0

그냥 스트리밍 작업을 만들면 Spark가 자동으로 실행 프로그램의 번호를 조정합니다 –

답변

1

Apache Flink에서는 모든 연산자가 #parallelism 병렬 인스턴스로 실행되도록 env.setParallelism(#parallelism)을 설정하여 작업의 병렬 처리를 정의하거나 심지어 dataStream.map(...).setParallelism(#parallelism);과 같이 연산자별로 정의/재정의 할 수 있습니다.

자세한 내용은 Flink docs https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/parallel.html을 확인하십시오. 카프카의 주제와 파티션 및 소비자 그룹에 대한 자세한 정보를 원하시면 env.addSource(kafkaConsumer).setParallelism(#topicPartitions)

확인 카프카 문서 :/아래로 카프카 주제 파티션 확장 할 당신이 (같은 그룹)을 병렬 수신기를 정의 할 수 있습니다 Kafa에서 읽기에 관한

https://kafka.apache.org/documentation/ .

Flink 프로그램 내에서 병렬 처리 수준을 지정하지 않고 로컬 Flink 클러스터에 병렬 처리 수준을 배포하면됩니다. 구성 파일 flinkDir/conf/flink-conf.yaml 내의 parallelism.default 매개 변수 값이 사용됩니다. -p으로 지정하지 않으면 ./bin/flink run .... -p #parallelism과 같습니다. Flink cli options을 확인하십시오.

+0

고마워요, Ehab, cmdline에서 'flink run'을 통해 작업하지만 모든 서버에서이 스크립트를 실행해야합니다. 그렇지 않으면 Flink가 어떻게해서이 작업을 '배포'할까요? 나는 작업자의 병렬 처리에 관심이있다. 그래서 나는 이것이 작업 슬롯에 의해 해결 될 수 있다고 생각한다. – estoy

+0

@estoy 연산자에 대한 병렬 처리 수준을 지정하면 Flink가 나머지를 처리합니다. 프로그램 코드는 연결 하위 작업의 데이터 흐름 그래프로 변환됩니다. 자세한 내용은 [here] (https://ci.apache.org/projects/flink/flink-docs-release-1.3/concepts/runtime.html)을 확인하십시오. 일자리의 평행성을 높이는 것의 의미는 무엇입니까? –

+0

내가 원하는 것은 이것입니다 : 하나의 문서가 kafka-> flink 작업에 게시 됨으로 처리됩니다. kafa에 게시 된 두 개의 문서 -> 두 개의 flink 작업이 병렬로 처리합니다. 두 번째가 끝나기를 기다리지 않고 – estoy