2017-12-26 18 views
0

우리는 spark-streaming-kafka-0-8 수신기를 사용하고 있습니다. numPartitions를 늘려서 소비되는 이벤트의 양을 늘릴 수 없습니다. 증가하는 numPartitions가 성능에 영향을 미치지 않는 것 같습니다.Spark Streaming Kafka Receivers API - numPartitions

KafkaUtils.createStream 메소드에는 topic_name에서 numPartitions까지의 맵핑이 있지만 각 파티션은 자체 스레드에서 사용되어야합니다. 1 개 실을 사용하는 경우보다 훨씬 더 많은 이벤트를 가져옵니다,하지만하지 않습니다 - (> 10 주제)

KafkaUtils.createStream[Integer, Event, IntegerDecoder, EventDecoder](ssc, 
    Configuration.kafkaConfig, scala.collection.immutable.Map(topic -> 1), 
    StorageLevel.MEMORY_AND_DISK) 
내가 scala.collection.immutable.Map를 사용하여 기대

:

는 현재 우리가 작업하는 성능 향상 (실제로 10 개의 스레드가 리시버 당 10 개의 쓰레드가 사용되었음을 확인했다.) 을 향상 시키지만 더 많은 카프카 리시버를 생성하면 성능이 향상된다.

버전 0-8에서 문제가 있습니까? numPartitions가 증가하면 소비되는 이벤트의 양이 증가해야합니까? numPartition을 늘리는 동안 수신기를 추가하면 성능이 향상되는 이유는 무엇입니까?

답변

1

버전 0-8에서 문제가 있습니까?

아니, 당신이 createStream로 사용중인되는 수신기 기반의 접근 방식, 있는 "문제"입니다. 상기 접근법은 주어진 Executor 노드에서 소비 할 단일 스레드를 생성합니다. 동시에 읽고 싶다면, 그러한 수신기를 여러 개 만들어야합니다. documentation

: 카프카에

항목 파티션 스트리밍 스파크 발생 RDDs 의 파티션 상관 없다. 따라서 주제별 파티션의 수를 늘리면 은 하나의 수신자 내에서 으로 소비되는 주제를 사용하는 스레드 수를 늘립니다. 그것은 소비를 위해 주어진 실행기 노드에 각각 TopicPartition를 전달 데이터

당신이 (KafkaUtils.createDirectStream를 사용하여) 직접 (receiverless) 기반의 접근 방식을 사용, 동시성을 늘리려면

을 처리하는 스파크의 병렬 처리를 증가시키지 않습니다 , 모든 유언 집행자가 카프카에서의 소비에 참여할 수있게한다.