본문 바로가기

빅데이터/Kafka

카프카 장애대응 - Consumer offset 지정하기(by partition)

카프카 consumer로 입수를 진행하다보면 예상치 못하게 데이터가 중복입수 또는 유실될 가능성이 있습니다.

 

- Kafka broker 이슈

- Network 이슈

- Consumer application 이슈

 

위와 같은 이슈가 발생했을 경우 이슈가 발생했던 시점보다 더 이전의 데이터부터 입수를 진행해야하는데 이때 offset을 지정해야합니다. offset을 지정하는 방법은 아래와 같습니다.

 

1) Consumer 생성

Consumer 생성은 재입수 하고자 하는 Consumer에 지정하여 신규로 생성.

2) Offset 지정(by console shell script)

./kafka-consumer-groups shell을 통해서 offset을 reset할 수 있습니다.

 

offset reset 옵션:

--shift-by : Long (+/- 모두 가능)
--to-offset : Long
--by-duration  : PnDTnHnMnS
--to-datetime  : YYYY-MM-DDTHH:mm:SS.sss
--to-current
--to-latest
--to-earliest

 

만약 click 이라는 토픽에  click_re_consumer 라는 consumer에 대해 offset을 earliest로 지정하고 싶다면 아래와 같이 호출하면 됩니다.

$ ./kafka-consumer-groups --bootstrap-server {bootstrap 정보} \
  --group click --topic click_re_consumer \
  --reset-offsets --to-earliest --execute

만약 특정 partition(여기서는 1번)의 데이터만 offset을 30으로 지정하고 싶다면 아래와 같이 topic명 뒤에 partition번호를 붙여주면 됩니다.

./kafka-consumer-groups --bootstrap-server {bootstrap 정보} \
--group click --topic click_re_consumer:1 \
--reset-offsets --to-offset 30 --execute

3) 재입수 진행

click_re_consumer 이름으로 click 토픽으로부터 재입수를 진행합니다.

태그

  • tom 2020.03.30 15:59 댓글주소 수정/삭제 댓글쓰기

    올려주신 내용 잘 보고 있습니다.
    중간에 cli 인자들이 바뀐 것 같은데요..
    --
    --group click --topic click_re_consumer
    --

    group 이 consumer 를 의미하고, topic이 토픽명을 의미 하는게 아닌지요?

    click 이라는 토픽에 click_re_consumer 라는 consumer에 대해 offset을 earliest로 지정하고 싶다

    ---
    --group click_re_consumer --topic click
    ---