프로젝트/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