Kafka Consumer
Kafka Consumer는 Kafka Topic에 저장된 message를 읽어 처리하는 client다. 읽은 message를 DB에 적재하거나, feature를 계산하거나, 다른 topic으로 다시 publish할 수 있다.
Consumer Group
Consumer는 보통 consumer group 단위로 동작한다. 같은 group 안의 consumer들은 topic partition을 나누어 읽으므로 처리량을 늘릴 수 있다.
반대로 서로 다른 group은 같은 topic을 독립적으로 읽는다. 그래서 하나의 event stream을 batch 적재, online feature 계산, monitoring pipeline이 각자 소비하는 구조를 만들 수 있다.
Offset
Consumer는 어디까지 읽었는지를 offset으로 관리한다. Offset commit 전략에 따라 장애가 났을 때 중복 처리(at-least-once)나 누락 위험(at-most-once)이 달라진다.
Kafka client API에서는 다음 값을 구분해서 보는 일이 많다.
| API | 의미 |
|---|---|
position() | consumer가 다음에 읽을 record의 offset |
committed() | partition별로 마지막 commit된 offset |
position()은 현재 consumer의 진행 위치이고, committed()는 장애 복구 시 다시 시작할 기준점에 가깝다. 둘이 다를 수 있으므로 consumer lag이나 retry 문제를 볼 때 구분해야 한다.
같이 볼 개념
Producer는 message를 topic으로 보내고, Consumer는 topic에서 message를 읽는다. 둘 사이의 logical stream이 Kafka Topic이다.