How to add new kafka topic listener at runtime


배경

  • 숙박, 레저, 항공, 철도 등 확장 가능한 다양한 서비스에 쿠폰을 적용할 수 있는 쿠폰 플랫폼 개발을 진행하게 되었습니다.
  • 각 서비스는 쿠폰을 제공하고 싶을 경우 플랫폼에 들어와야 합니다.
  • 이를 위해 서비스는 플랫폼에 등록 해야 하며, 서비스의 주문 이벤트가 적재되는 Kafka Topic을 플랫폼에 함께 등록해야 합니다.
  • 하지만, Spring Kafka의 @KafkaListener는 Runtime에 새로운 Kafka Topic을 등록하고 Consuming 할 수 없습니다.
  • 따라서, 개발자는 새로운 서비스가 플랫폼에 들어올 때 새로운 @KafkaListener를 추가하는 개발 및 배포 작업을 진행해야 합니다.

목표

Runtime에 새롭게 추가 된 Kafka Topic을 등록, 삭제, 시작, 종료 할 수 있는 도구 개발

결과

Runtime에 new kafka topic을 add, remove, start, stop 기능 개발 완료

Github

마치며

  • 아마도 일반적인 상황에서는 필요하지 않은 요구사항으로 보입니다.
  • 여러 가지 서비스들이 들어올 수 있는 플랫폼 개발이었기에, 추가 개발이 필요없고 재부팅도 필요 없는 위와 같은 기능이 필요 하였습니다.
  • 플랫폼에 새로운 서비스가 들어온다고 추가 개발 및 재부팅을 하는 작업은 플랫폼의 안정성을 저해하는 요소로 봤기 때문입니다.
  • 따라서, 소스 코드의 추가가 아닌 데이터의 추가로 문제를 해결하기 위해 개발하게 되었습니다.
  • 추가적으로, Kafka Topic Listener의 추가, 삭제, 시작, 정지 기능은 사용하는 쪽에서 API 호출, Scheduler, Event 등을 Trigger로 동작시키면 됩니다.

pkgonan

서버 개발자 Github Linkedin Facebook

Java 및 Spring을 활용한 서버 개발과 성능 튜닝에 관심이 있습니다. 객체지향 및 테스트 코드 작성을 중요하게 생각하며, 변화에 강한 코드를 작성하고자 노력하고 있습니다.