Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

카프카, 산전수전 노하우

451 views

Published on

고승범(peter.ko) / kakao corp.(인프라2팀)
---
카카오에서는 빅데이터 분석, 처리부터 모든 개발 플랫폼을 이어주는 솔루션으로 급부상한 카프카(kafka)를 전사 공용 서비스로 운영하고 있습니다. 전사 공용 카프카를 직접 운영하면서 경험한 트러블슈팅과 운영 노하우 등을 공유하고자 합니다. 특히 카프카를 처음 접하시는 분들이나 이미 사용 중이신 분들이 많이 궁금해하는 프로듀서와 컨슈머 사용 시의 주의점 등에 대해서도 설명합니다.

Published in: Software
  • Be the first to comment

카프카, 산전수전 노하우

  1. 1. 카프카, 산전수전 노하우 발표자(peter.ko) kakao corp.(인프라2팀)
  2. 2. - 카카오 인프라팀 소속 - 페이스북 KAFKA 한국 사용자 그룹 개설자
 (facebook.com/groups/kafkakorea/) - <카프카, 데이터 플랫폼의 최강자> 저자 
 예스24 IT 분야 1위(이틀..;) - Popit.kr 저자, 개인 브런치 운영 중 고승범 (peter.ko)
  3. 3. ‣ 카프카의 현황 ‣ 트러블 슈팅 ‣ Shrinking ISR ‣ Rack Power ‣ 프로듀서와 컨슈머 ‣ 운영 오늘 나눌 이야기
  4. 4. 카프카의 현황
  5. 5. 주키퍼 3EA 카프카 3EA 카프카 클러스터
  6. 6. 2 클러스터 / 10EA 7 클러스터 / 130EA
  7. 7. 7 클러스터 / 130EA B IDC 카프카 카프카 카프카 카프카 주키퍼 A IDC 카프카 카프카카프카 주키퍼 추천 카카오스토어 다음검색 카카오톡 다음메일 카카오스토리 카카오톡치즈 카카오TV 다음웹툰 카카오선물하기 카카오내비 카카오버스 카카오맵 카카오게임 카카오i
  8. 8. 260,000,000,000 / day
  9. 9. 240 TB / day 370 TB / day
  10. 10. 가동률 99.99% 1시간 / 2년
  11. 11. 트러블슈팅
  12. 12. 1. Shrinking ISR
  13. 13. ISR이란? ‣ In-Sync Replicas(ISR) ‣ 리플리케이션 구성원은 리더와 팔로워 ‣ 리더만 읽고 쓰기 ‣ 팔로워들은 리더를 주기적으로 동기화 ‣ ISR의 구성원만이 리더의 자격을 갖는다.
  14. 14. 카프카 클러스터 peter-topic
 partition-0 peter-topic
 partition-0 peter-topic
 partition-0 ISR & RF3 ISR ISR Broker1 Broker2 Broker3
  15. 15. 카프카 클러스터 peter-topic
 partition-0 peter-topic
 partition-0 peter-topic
 partition-0 Shrinking ISR ISR Broker1 Broker2 Broker3
  16. 16. 카프카 문제 있나요?
  17. 17. 카프카 클러스터 Broker5Broker4Broker3 Broker6 Broker7 topic01 topic01 topic01 topic02 topic02 topic02 topic03 topic03 topic03 topic04topic04 topic05 topic05
  18. 18. [2000-00-00 00:00:00,001] INFO Partition [__consumer_offsets,19] on broker 5: Shrinking ISR for partition [__consumer_offsets,19] from 3,4,5 to 5 (kafka.cluster.Partition) [2000-00-00 00:00:00,002] INFO Partition [__consumer_offsets,29] on broker 5: Shrinking ISR for partition [__consumer_offsets,29] from 4,5,6 to 5 (kafka.cluster.Partition) [2000-00-00 00:00:00,003] INFO Partition [__consumer_offsets,9] on broker 5: Shrinking ISR for partition [__consumer_offsets,9] from 3,5,2 to 5 (kafka.cluster.Partition)
  19. 19. Broker5 Broker4 Broker3 Broker6 Broker7 카프카 클러스터
  20. 20. 0.10.1.0 버그
  21. 21. 카프카 버전 업그레이드 ‣ 다운타임을 가질 수 있는 환경 ‣ 전체 브로커 종료 후 버전 업그레이드 진행 ‣ 다운타임을 가질 수 없는 환경 ‣ 클러스터내 브로커 한대씩 버전 업그레이드를 진행 ‣ 카카오에서는.. ‣ 크리티컬 이슈가 발생하거나 신규 기능이 추가되는 경우 다운타임없이 버전 업그레이드 진행
  22. 22. 2. Rack Power
  23. 23. IDC Rack Rack Rack Rack Rack Rack Rack Rack Rack Rack Rack Rack Rack Rack Rack Rack Rack Rack Rack Rack
  24. 24. 카프카 클러스터 RACK1 RACK2 RACK3 Broker1 Web1 Broker2 Web2 Broker3
  25. 25. 모든 브로커 다운
  26. 26. 카프카 클러스터 RACK1 RACK2 RACK3 Broker1 Broker2 Broker3 peter-topic
 message: A peter-topic
 message: A peter-topic
 message: A
  27. 27. 카프카 클러스터 RACK1 RACK2 RACK3 Broker1 Broker2 Broker3 peter-topic
 message: A peter-topic
 message: A peter-topic
 message: A
  28. 28. 카프카 클러스터 RACK1 RACK2 RACK3 Broker1 Broker2 Broker3 peter-topic
 message: A peter-topic
 message: A peter-topic
 message: A
  29. 29. 카프카 클러스터 RACK1 RACK2 RACK3 Broker1 Broker2 Broker3 peter-topic
 message: A peter-topic
 message: A peter-topic
 message: A peter-topic
 message: B peter-topic
 message: B
  30. 30. 카프카 클러스터 RACK1 RACK2 RACK3 Broker1 Broker2 Broker3 peter-topic
 message: A peter-topic
 message: A peter-topic
 message: A peter-topic
 message: B peter-topic
 message: B
  31. 31. 카프카 클러스터 RACK1 RACK2 RACK3 Broker1 Broker2 Broker3 peter-topic
 message: A peter-topic
 message: A peter-topic
 message: A peter-topic
 message: B peter-topic
 message: B
  32. 32. 카프카 클러스터 RACK1 RACK2 RACK3 Broker1 Broker2 Broker3 peter-topic
 message: A peter-topic
 message: A peter-topic
 message: A peter-topic
 message: B peter-topic
 message: B peter-topic
 message: C
  33. 33. 카프카 클러스터 RACK1 RACK2 RACK3 Broker1 Broker2 Broker3 peter-topic
 message: A peter-topic
 message: A peter-topic
 message: A peter-topic
 message: B peter-topic
 message: B peter-topic
 message: C
  34. 34. 카프카 클러스터 RACK1 RACK2 RACK3 Broker1 Broker2 Broker3 peter-topic
 message: A peter-topic
 message: A peter-topic
 message: A peter-topic
 message: B peter-topic
 message: B peter-topic
 message: C
  35. 35. 카프카 클러스터 RACK1 RACK2 RACK3 Broker1 Broker2 Broker3 peter-topic
 message: A peter-topic
 message: A peter-topic
 message: A peter-topic
 message: B peter-topic
 message: B peter-topic
 message: C peter-topic
 message: D
  36. 36. 카프카 클러스터 RACK1 RACK2 RACK3 Broker1 Broker2 Broker3 peter-topic
 message: A peter-topic
 message: A peter-topic
 message: A peter-topic
 message: B peter-topic
 message: C peter-topic
 message: D peter-topic
 message: B peter-topic
 message: C peter-topic
 message: D peter-topic
 message: B peter-topic
 message: C peter-topic
 message: D
  37. 37. 카프카 클러스터 RACK1 RACK2 RACK3 Broker1 Broker2 Broker3 peter-topic
 message: A peter-topic
 message: A peter-topic
 message: A peter-topic
 message: B peter-topic
 message: B peter-topic
 message: C
  38. 38. 카프카 클러스터 RACK1 RACK2 RACK3 Broker1 Broker2 Broker3 peter-topic
 message: A peter-topic
 message: A peter-topic
 message: A peter-topic
 message: B peter-topic
 message: B peter-topic
 message: C peter-topic
 message: D
  39. 39. 카프카 클러스터 RACK1 RACK2 RACK3 Broker1 Broker2 Broker3 peter-topic
 message: A peter-topic
 message: A peter-topic
 message: A peter-topic
 message: D peter-topic
 message: D peter-topic
 message: D
  40. 40. 카프카 클러스터 RACK1 RACK2 RACK3 Broker1 Broker2 Broker3 peter-topic
 message: A peter-topic
 message: A peter-topic
 message: A peter-topic
 message: D peter-topic
 message: D peter-topic
 message: D 서비스의 영속성, 데이터 정합성
  41. 41. 프로듀서와 컨슈머
  42. 42. 1. 프로듀서
  43. 43. 프로듀서 ‣ 프로듀서는 파티션의 리더로 직접 메시지를 전송 ‣ 특정 파티션 또는 랜덤 파티션으로 전송 ‣ 빠른 전송 속도 보장 ‣ 효율성이 좋은 배치 처리 가능 ‣ 설정을 통해 배치 크기나 지연시간 조정
  44. 44. 프로듀서 ACKS ‣ ACKS = 0 ‣ 매우 빠르게 전송할 수 있지만, 파티션의 리더가 받았는지 알 수 없음 ‣ ACKS = 1(Strongly Recommend) ‣ 메시지 전송도 빠른편이고, 파티션의 리더가 받았는지 확인 ‣ 가장 많이 사용되고, 최근 대부분의 기본값으로 사용 ‣ ACKS = ALL ‣ 메시지 전송 속도는 가장 느리지만, 손실 없는 메시지 전송 가능
  45. 45. Broker1 Broker2 Broker3 프로듀서 ack=1 peter-topic peter-topic peter-topic RF3
  46. 46. Broker1 Broker2 Broker3 프로듀서 ack=1 peter-topic peter-topic peter-topic message: A
  47. 47. Broker1 Broker2 Broker3 프로듀서 ack=1 peter-topic peter-topic peter-topic message: A
  48. 48. Broker1 Broker2 Broker3 프로듀서 ack=1 peter-topic peter-topic peter-topic message: A ack
  49. 49. Broker1 Broker2 Broker3 프로듀서 ack=1 peter-topic peter-topic peter-topic message: A message: A message: A
  50. 50. Broker1 Broker2 Broker3 프로듀서 ack=1 peter-topic peter-topic peter-topic message: A message: A message: A message: B
  51. 51. Broker1 Broker2 Broker3 프로듀서 ack=1 peter-topic peter-topic peter-topic message: A message: A message: A message: B ack
  52. 52. Broker1 Broker2 Broker3 프로듀서 ack=1 peter-topic peter-topic peter-topic message: A message: A message: A message: B ack
  53. 53. Broker1 Broker2 Broker3 프로듀서 ack=1 peter-topic peter-topic peter-topic message: A message: A message: A message: B ack
  54. 54. Broker1 Broker2 Broker3 프로듀서 ack=1 peter-topic peter-topic peter-topic message: A message: B message: Amessage: A
  55. 55. Broker1 Broker2 Broker3 프로듀서 ack=1 peter-topic peter-topic peter-topic message: A message: B message: Amessage: A message: C
  56. 56. Broker1 Broker2 Broker3 프로듀서 ack=1 peter-topic peter-topic peter-topic message: A message: B message: Amessage: A message: C ack message: C
  57. 57. Broker1 Broker2 Broker3 프로듀서 ack=1 peter-topic peter-topic peter-topic message: A message: B message: Amessage: A message: Cmessage: C message: D
  58. 58. Broker1 Broker2 Broker3 프로듀서 ack=1 peter-topic peter-topic peter-topic message: A message: C message: Amessage: A message: Cmessage: C message: Dmessage: Dmessage: D
  59. 59. 특정 파티션이 이상해요.. 문제 있나요?
  60. 60. 프로듀서 KEY
  61. 61. Topic: peter-topic, Partition: 1, Offset: 33, Key: a, Received message: Apache Kafka is 1 Topic: peter-topic, Partition: 1, Offset: 34, Key: a, Received message: Apache Kafka is 2 Topic: peter-topic, Partition: 1, Offset: 35, Key: a, Received message: Apache Kafka is 3 Topic: peter-topic, Partition: 1, Offset: 36, Key: a, Received message: Apache Kafka is 4 Topic: peter-topic, Partition: 1, Offset: 37, Key: a, Received message: Apache Kafka is 5
  62. 62. Topic: peter-topic, Partition: 1, Offset: 31, Key: None, Received message: Apache Kafka is 9 Topic: peter-topic, Partition: 1, Offset: 32, Key: None, Received message: Apache Kafka is 10 Topic: peter-topic, Partition: 0, Offset: 23, Key: None, Received message: Apache Kafka is 1 Topic: peter-topic, Partition: 0, Offset: 24, Key: None, Received message: Apache Kafka is 4 Topic: peter-topic, Partition: 0, Offset: 25, Key: None, Received message: Apache Kafka is 7
  63. 63. 2. 컨슈머
  64. 64. 컨슈머 ‣ 컨슈머는 파티션의 리더에게 "fetch" 요청을 하는 역할 ‣ 컨슈머는 위치를 기록하고 있는 오프셋으로부터 메시지를 가져온다. ‣ 컨슈머의 목적은 컨슈머가 가능한 최대 속도로 가져갈 수 있도록 하는 것
  65. 65. 파티션의 오프셋 순서대로
  66. 66. 파티션의 오프셋 순서대로
  67. 67. 컨슈머 그룹 ‣ 하나의 토픽을 여러 컨슈머들이 구독 ‣ 컨슈머 그룹으로 그룹핑하여 컨슈머를 확장할 수 있다. ‣ 프로듀서가 토픽으로 보내는 메시지 비율을 높인다면? ‣ 컨슈머는 프로듀서의 속도를 따라가지 못하게 된다.
  68. 68. 하나의 파티션에는 하나의 컨슈머만 가능
  69. 69. 하나의 파티션에는 하나의 컨슈머만 가능
  70. 70. 컨슈머 그룹을 이용한 멀티 컨슈머
  71. 71. LAG이 뭔가요?
  72. 72. Burrow ‣ 카프카 컨슈머 Lag Checking ‣ HTTP ‣ Go ‣ https://github.com/linkedin/Burrow Consumer group
  73. 73. 운영
  74. 74. 미사용 토픽
  75. 75. 토픽 수가 늘기만 하는데, 좋은 방법은 없을까?
  76. 76. JMX로 토픽 상태값을 수집 저장 후 조건에 일치하는 토픽 삭제
  77. 77. topic01 topic02 topic04 topic03
  78. 78. ‣ 브로커의 로그 ‣ 서비스 영속성, 데이터 정합성 ‣ 프로듀서 ‣ 컨슈머 ‣ 좋은 애플리케이션인 카프카를 적극 활용!! 마무리
  79. 79. 감사합니다!!

×