(아직 kafka를 공부 중에 있으므로 틀린 내용이 있을 수도 있다.)
spring boot + kafka를 이용해 채팅 기능을 구현하려던 찰나, 의문이 들었다.
과연 kafka topic 하나로만 채팅을 구현해도 괜찮은 것일까?
만약 채팅방이 여러 개 생기고, 많은 채팅이 오고가게 되면, 하나의 topic에 정말 많은 채팅 메시지 데이터들이 쌓이게 될텐데, 이걸 분산시키지 않아도 되나? 에서 시작된 고민이다.
https://stackoverflow.com/questions/72731155/kafka-topics-as-chatroom-identifiers
위 링크를 들어가보면 나랑 비슷한 고민을 한 사람이 있었다.
하지만 이 답변에는 “그래도 된다.” 이긴 했지만 항상 “하지만”이 따르는 법 ..
채팅방마다 kafka의 topic을 생성해 관리하는 것은 consumer 관점에서는 좋지 않은 디자인이라고 한다.
💡 kafka는 엄청 많은 topic을 생성할 수 있을까?
→ 가능하다
https://stackoverflow.com/questions/32950503/can-i-have-100s-of-thousands-of-topics-in-a-kafka-cluster
결론적으로는 어차피 실제 데이터베이스에 채팅 메시지를 저장하는 것이 더 효율적이라고 한다.
채팅이 로드 될때는 어차피 kafka topic이 아닌 데이터베이스 쿼리를 이용해 로드하는 것.
CQRS 패턴을 참조하란다.