카테고리 없음

Kubernetes 멀티 팟 배포에서 Spring Kafka를 사용하여 Kafka 컨테이너 수명주기를 처리하는 방법

기록만이살길 2021. 2. 21. 00:00
반응형

Kubernetes 멀티 팟 배포에서 Spring Kafka를 사용하여 Kafka 컨테이너 수명주기를 처리하는 방법

1. 질문(문제점):

Spring kafka 구현을 사용하고 있으며 REST API를 통해 kafka 소비자를 시작하고 중지해야합니다. 이를 위해 KafkaListenerEndpointRegistry endpointRegistry를 사용하고 있습니다.

endpointRegistry.getListenerContainer ( "consumer1"). stop ();

endpointRegistry.getListenerContainer ( "consumer1"). start ();

동일한 마이크로 서비스에 대해 여러 배포가있을 수 있도록 kubernetes 포드에 마이크로 서비스를 배포하고 있습니다. 모든 컨테이너에서 소비자를 어떻게 시작하고 중지 할 수 있습니까?

2. 해결방안:

Kubernetes는 서비스에 대한 모든 포드에 http- 요청을 자동으로 브로드 캐스트하는 기능을 제공하지 않습니다. 그래서 당신은 그것을 스스로해야합니다.

Kafka를 통해 방송

http- 요청을 수신하는 단일 인스턴스에서 시작 / 중지 명령을 모든 인스턴스 간의 브로드 캐스트 명령 전용으로 주제에 게시 할 수 있습니다.

물론 각 인스턴스가 해당 주제에 대한 모든 메시지를 읽을 수 있는지 확인해야하므로 이러한 인스턴스간에 파티션이 균형을 이루지 않도록해야합니다. 해당 주제에 대한 소비자에 고유 한 그룹 ID를 설정 (예 : UUID로 일반 groupId 접미사)하여이를 달성 할 수 있습니다.

Http를 통한 방송

Kubernetes는 어떤 포드가 어떤 엔드 포인트에서 수신 대기하는지 알고 있으며 서비스에서 해당 정보를 얻을 수 있습니다. Spring Cloud Kubernetes ( https://cloud.spring.io/spring-cloud-static/spring-cloud-kubernetes/2.0.0.M1/reference/html/#ribbon-discovery-in-kubernetes )를 사용하면 쉽게 얻을 수 있습니다. 그 정보에서; 이를 수행하는 방법에는 여러 가지가있을 것입니다. Spring Cloud Kubernetes를 사용하면 다음과 같이됩니다.

무작위로 선택한 포드에서 명령을 받고 리본에서 ServerList (모든 인스턴스와 연결할 수있는 ip-address / port 포함)를 가져온 다음 각각에 새 http- 요청을 보냅니다.

견고성 때문에 Kafka 접근 방식을 선호하고 이미 Spring Cloud를 사용하고 있다면 http 접근 방식이 구현하기 더 쉬울 수 있습니다.

65927479
반응형