Kafka Topic Change Notification with Slack
2023, Jul 13
목표
- 다른 어플리케이션에서 발행하는 토픽 정보가 바뀔때 대응개발이 필요한데, 코드를 보기 전까지 알기 어렵다.
- avro와 같은 것을 적용해서 스키마 관리를 하지 않기 때문에, 더더욱 변화를 알기 어려움
- 목표는 spring.json.type.mapping정보까지 diff하려고 한다.
- avro를 사용하지 않으면, 해당 토픽을 consume해야한다.
- 일단 토픽명만 diff하는 것으로 프로젝트 구성
구성 환경
- 자바 1.8~
- spring boot 3.x
- kafka-client 2.6.x
- slack-api-client 1.29.2
- gradle 8.1.1
작업 내용
kafka client 라이브러리를 통해 Admin API를 사용해서 topic 리스트를 조회한다.
Properties properties = new Properties(); properties.put("bootstrap.servers", bootstrapServer); Admin admin = Admin.create(properties); Set<String> topicSet; try { topicSet = admin.listTopics().names().get(); } catch (Exception e) { throw new RuntimeException(e); } admin.close(); return topicSet;
- 파일로 저장되어있는 토픽 리스트와 비교한다.
비교 후 차이가 발생한 토픽은 슬랙API를 사용해서 메시지 발송
static void publishMessage(String channelId, String message) { var client = Slack.getInstance().methods(); try { var result = client.chatPostMessage(r -> r .token(token) .channel(channelId) .text(message) ); log.info("result {}", result); } catch (IOException | SlackApiException e) { log.error("error: {}", e.getMessage(), e); } }
Repository
https://github.com/tnfhrnsss/kafka-monitoring.git