프로젝트/kafka
kafka Consumer group id 랜덤으로 부여
Junuuu
2023. 8. 4. 00:01
728x90
개요
Consumer의 groupId를 랜덤으로 부여하여 pub/sub처럼 구성하고 싶었습니다.
Instance가 여러 대일 때 동기화 하고자 했습니다.
KafkaListener doc
/**
* Override the {@code group.id} property for the consumer factory with this value
* for this listener only.
* <p>SpEL {@code #{...}} and property place holders {@code ${...}} are supported.
* @return the group id.
* @since 1.3
*/
String groupId() default "";
groupId를 SpEL 문법을 통해서도 지정할 수 있습니다.
SpEL 문법이란?
Spring Expression Language의 약자로 런타임에서 객체에 대한 쿼리와 조작을 지원하는 언어입니다.
KafkaListener에 SpEL 문법 적용
@KafkaListener(topics = ["testTopic"], groupId = "#{ T(java.util.UUID).randomUUID().toString() }")
fun consume(@Payload payload: String, acknowledgment: Acknowledgment) {
logger.info("Consumer start: $payload")
acknowledgment.acknowledge()
}
적용 후 실행로그
2023-07-06T15:50:32.367+09:00 INFO 61101 --- [ntainer#0-0-C-1] o.s.k.l.KafkaMessageListenerContainer :
90ac82ff-ef6d-4c21-b8e6-27b22f86ff58: partitions assigned: [testTopic-0]
instance1에 uuid가 랜덤으로 부여됨
2023-07-06T15:50:13.947+09:00 INFO 61041 --- [ntainer#0-0-C-1] o.s.k.l.KafkaMessageListenerContainer :
605e11e0-d01f-4bb7-9205-50fd69335e9a: partitions assigned: [testTopic-0]
instance2에 uuid가 랜덤으로 부여됨
참고자료
https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/expressions.html