kafka 메시지는 한 서버에서만 사용할 수 있는 문제 해결 과정

2224 단어 kafka
장면:
kafka 소비단은 두 대의 기계에 설치되어 있는데 그 중 한 대는 생산단이 보낸 kafka 메시지를 소비할 수 있고 다른 한 서버는 어떤 메시지도 받지 못한다.
해결 절차:
1. 소비단 시작 로그에서 모든 소비단 라인을 찾아낸다
2019-04-23 20:04:44,726 [xx_xxapp03-1556011171628-976bc2af_watcher_executor] INFO  kafka.consumer.RangeAssignor -
                [Ip:|User:]Consumer xx_xxapp03-1556011171628-976bc2af rebalancing the following partitions: ArrayBuffer(0, 1) for topic xx_import_data with consumers: List(xx_xxapp03-1556011171628-976bc2af-0, xx_xxapp03-1556021084370-e7a7a47d-0, xx_xxapp04-1556011055427-2927d364-0)
2019-04-23 20:04:44,726 [xx_xxapp03-1556011171628-976bc2af_watcher_executor] INFO  kafka.consumer.RangeAssignor -
                [Ip:|User:]xx_xxapp03-1556011171628-976bc2af-0 attempting to claim partition 0

2. 분석 시작 로그
위의 로그에서 두 번째 줄에서 알 수 있듯이 세 개의 소비단 스레드 xx_xxapp03-1556011171628-976bc2af-0, xx_xxapp03-1556021084370-e7a7a47d-0,xx_xxapp04-1556011055427-2927d364-0 소비 두 구역partitions: ArrayBuffer(0,1).
우리는kafka의partition이 한 소비자에게만 라인을 소비하게 할 수 있다는 것을 알고 있다. 그러면 마지막 소비단에 있는 라인은 틀림없이 소식을 소비하지 못할 것이다. 왜냐하면 2개의partition만이 각각 앞의 두 개의 소비 라인에 소비되기 때문이다. 만약에 앞의 두 개의 소비 라인과 마지막 소비 라인이 각각 두 대의 다른 기계에 위치한다면 한 대의 기계가 kafka 소식을 소비하지 못할 것이다. 문제는 바로 여기서 나온 것이다.
3. kafka 소비 라인 생산 관련 코드 수정
public void startConsumer() {
        consumerConnector = consumerConnectorFactory.createConsumerConnector(zookeeperConnect, groupId);
        LOGGER.info("CSIRAS   Kafka topic xx_import_data Kafka Consumer ");
        // topic 
        Map topicCountMap = new HashMap();
        //cosumer 
        int consumerThreadNum = partitionNum / serverNum != 0 ? partitionNum / serverNum : 1;
        topicCountMap.put(topic, consumerThreadNum);
        //  
        Map>> consumerMap = consumerConnector.createMessageStreams(topicCountMap);
        //  
        List> kafkaStreamList = consumerMap.get(topic);

        ......
}

int consumerThreadNum = partitionNum/serverNum != 0 ? partitionNum/serverNum : 1;
위의 코드를 통해 모든 서버 응용 프로그램의 소비 루트 수를 제어하여 모든 응용 프로그램이 너무 많은 무효한 소비 루트를 생산하지 않도록 보증한다.

좋은 웹페이지 즐겨찾기