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;
위의 코드를 통해 모든 서버 응용 프로그램의 소비 루트 수를 제어하여 모든 응용 프로그램이 너무 많은 무효한 소비 루트를 생산하지 않도록 보증한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spring Cloud를 사용한 기능적 Kafka - 1부지금까지 찾을 수 없었던 Spring Cloud Kafka의 작업 데모를 만들기 위해 이 기사를 정리했습니다. Confluent 스키마 레지스트리 7.1.0 이 기사는 먼저 Spring Cloud Stream을 사용...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.