복붙노트

[SPRING] 소비자 구성을 2 개 사용하면 소비자 처리량이 느려짐

SPRING

소비자 구성을 2 개 사용하면 소비자 처리량이 느려짐

spring-integration-kafka 확장 및 다음 구성 사용 :

<int-kafka:zookeeper-connect id="zookeeperConnect"
    zk-connect="#{kafkaConfig['zooKeeperUrl']}" zk-connection-timeout="10000"
    zk-session-timeout="10000" zk-sync-time="2000" />

<int-kafka:consumer-context id="consumerContext" consumer-timeout="5000" zookeeper-connect="zookeeperConnect">
    <int-kafka:consumer-configurations>
        <int-kafka:consumer-configuration
                group-id="realtime-services-consumer-grp" 
                value-decoder="purchaseDecoder" 
                key-decoder="kafkaReflectionDecoder"
                max-messages="5" >
            <int-kafka:topic id="purchase" streams="1" />
        </int-kafka:consumer-configuration>
        <int-kafka:consumer-configuration 
                group-id="realtime-services-consumer-gw"
                value-decoder="eventDecoder" 
                key-decoder="kafkaReflectionDecoder" 
                max-messages="10" >
            <int-kafka:topic id="event" streams="1" />
        </int-kafka:consumer-configuration>
    </int-kafka:consumer-configurations>
</int-kafka:consumer-context>

<int-kafka:inbound-channel-adapter
    id="kafkaInboundChannelAdapter" kafka-consumer-context-ref="consumerContext"
    auto-startup="true" channel="inputFromKafka">
    <int:poller fixed-delay="20" time-unit="MILLISECONDS" />
</int-kafka:inbound-channel-adapter>

예를 들어 첫 번째 소비자 구성에 대한 의견을 말하면 분당 300 건의 이벤트를 아무런 문제없이 처리 할 수 ​​있습니다. 그러나 둘 다 활성화 될 때. 나는 처리량이 매우 낮다. 두 주제에서 나오는 처리량의 합계가 분당 50보다 적습니다.

누구나 2 화제에서 읽을 때 왜 그런 저조한 성과를 얻었는지 아십니까? 구성에서 내가 뭘 잘못 했습니까?

해결법

  1. ==============================

    1.이것을 지적 해 주셔서 감사합니다!

    이것을 지적 해 주셔서 감사합니다!

    내 로컬 카프카 클러스터와 큰 싸움을 한 후에는 문제를 재현 할 수 있었고 몇 가지 해결 방법이 있습니다 .--).

    우선 라운드 로빈이 아니라 하나씩 차례대로 실행됩니다.

    for (final ConsumerConfiguration<K, V> consumerConfiguration : getConsumerConfigurations().values()) {
        Map<String, Map<Integer, List<Object>>> messages = consumerConfiguration.receive();
    

    해당 consumerConfiguration이 해당 consumer-timeout = "5000"동안 백그라운드에서 차단되는 경우, 현재 KafkaStream에 메시지가없는 경우. 따라서 의 전체 폴링 작업은 타임 아웃이 될 때까지 차단됩니다. 각 항목에 메시지가 없으면 전체 대기 시간 제한이 합쳐집니다.

    문제를 극복하기 위해 각 주제에 대해 consumer-timeout = "5000"을 줄이거 나 여러 및 따라서 를 제공 할 수 있습니다.

    그렇습니다. 이상하게 보입니다. 릴리스 이전에 이것을 살펴볼 시간을 찾지 못했지만, 어쨌든 JIRA 문제를 해결하기 위해 언제든지 자유롭게 문제를 해결할 수 있습니다.

    고맙습니다!

  2. from https://stackoverflow.com/questions/28412482/slow-consumer-throuput-when-using-2-consumer-configuration by cc-by-sa and MIT license