[{"data":1,"prerenderedAt":310},["ShallowReactive",2],{"post-document:\u002Fbackend\u002Fkafka\u002F2026\u002F08\u002F26\u002Ftemp\u002F":3},{"id":4,"title":5,"body":6,"categories":292,"date":295,"description":296,"extension":297,"image":298,"key_concepts":298,"last_modified_at":298,"legacyPath":299,"meta":300,"navigation":301,"part":298,"path":302,"published":301,"robots":298,"seo":303,"series":298,"stem":304,"strengths":298,"summary":298,"tags":305,"tradeoffs":298,"__hash__":309},"posts\u002Fposts\u002FBackend\u002FKafka\u002Ftemp.md","Kafka 기본 개념과 EC2 Docker 구성",{"type":7,"value":8,"toc":285},"minimark",[9,16,21,26,29,32,35,38,41,44,47,50,54,57,60,63,66,69,72,76,79,82,85,88,91,99,103,106,109,122,125,128,132,264,267,270,273,276,279,282],[10,11,12],"blockquote",{},[13,14,15],"p",{},"Kafka는 서비스끼리 직접 호출하지 않고 “발생한 사건(Event)”을 중간 로그에 기록해 두고 각 서비스가 자기 속도로 읽게 만드는 분산 이벤트 스트리밍 플랫폼",[17,18,20],"h1",{"id":19},"_1-kafka의-핵심-철학","1. Kafka의 핵심 철학",[22,23,25],"h2",{"id":24},"서비스끼리-서로-몰라도-된다","서비스끼리 서로 몰라도 된다.",[13,27,28],{},"Kafka가 없다면:",[13,30,31],{},"OrderService → MailService API 직접 호출",[13,33,34],{},"이 구조에서는 MailService가 느리거나 장애가 나면 주문 처리까지 영향을 받을 수 있다",[13,36,37],{},"Kafka를 사용하면:",[13,39,40],{},"OrderService -> Kafka -> MailService -> PointService -> AnalyticsService",[13,42,43],{},"OrderService는 MailService의 주소나 상태를 몰라도 됩니다. 단지 Kafka에 다음 사실을 기록",[13,45,46],{},"“주문 123번이 완료됐다.”",[13,48,49],{},"일단 기록되면, 이 사안에 관심이 있는 서비스들이 읽어갑니다. 이것을 \"결합도를 낮춘다\" 라고 합니다.",[22,51,53],{"id":52},"메시지를-전달하고-바로-버리지-않는다","메시지를 전달하고 바로 버리지 않는다.",[13,55,56],{},"일반적인 메시지 전달기로만 생각하면",[13,58,59],{},"보내고 -> 받고 -> 바로 사라짐 (게임 채팅을 생각해보자)",[13,61,62],{},"Kafka는 비동기로 데이터를 저장할 수 있다.",[13,64,65],{},"보내고 -> 로그에 저장하고 -> 소비자가 읽고 -> 필요하면 다시 읽는다.",[13,67,68],{},"소비자가 읽어도 메시지가 즉시 삭제되지 않는다, 설정된 보관 기관 동안 남기 때문에 장애 복구, 재처리, 신규 서비스의 과거 데이터 분석이 가능하다.",[13,70,71],{},"그래서 Kafka는 단순한 “우체부”보다 여러 서비스가 함께 읽는 사건 기록장에 가깝다.",[22,73,75],{"id":74},"처리량을-파티션으로-확장한다","처리량을 파티션으로 확장한다",[13,77,78],{},"메시지가 너무 많으면 하나의 통로로 처리하기가 어렵다. Kafka는 Topic을 여러 Partition으로 나누고 병렬로 처리",[13,80,81],{},"order-events\n├─ Partition 0\n├─ Partition 1\n└─ Partition 2",[13,83,84],{},"각 파티션은 서로 다른 소비자가 동시에 처리할 수 있다.",[13,86,87],{},"순서는 전체가 아니라 파티션 안에서 보장",[13,89,90],{},"Topic 전체 순서 ❌\nPartition 내부 순서 ✅",[13,92,93],{},[94,95,96],"a",{"href":96,"rel":97},"https:\u002F\u002Fkafka.apache.org\u002Fdocumentation\u002F",[98],"nofollow",[17,100,102],{"id":101},"_2-kafka의-정의","2. Kafka의 정의",[13,104,105],{},"공식적으로 Kafka는 분산 이벤트 스트리밍 플랫폼",[13,107,108],{},"세 가지 기능을 합친 것",[110,111,112,116,119],"ol",{},[113,114,115],"li",{},"이벤트를 발행하고 구독",[113,117,118],{},"이벤트를 디스크에 지속해서 보관한다",[113,120,121],{},"실시간 또는 나중에 이벤트를 처리한다",[13,123,124],{},"즉, Kafka는 다음 성격을 동시에 가지고 있다.",[13,126,127],{},"메시지 브로커 + 분산 로그 저장소  + 실시간 데이터 파이프라인",[17,129,131],{"id":130},"_3-핵심-단어","3. 핵심 단어",[133,134,135,148],"table",{},[136,137,138],"thead",{},[139,140,141,145],"tr",{},[142,143,144],"th",{},"용어",[142,146,147],{},"의미",[149,150,151,160,168,176,184,192,200,208,216,224,232,240,248,256],"tbody",{},[139,152,153,157],{},[154,155,156],"td",{},"Event \u002F Record \u002F Message",[154,158,159],{},"“주문이 완료됐다”처럼 발생한 사건 한 건",[139,161,162,165],{},[154,163,164],{},"Producer",[154,166,167],{},"Kafka에 이벤트를 보내는 애플리케이션",[139,169,170,173],{},[154,171,172],{},"Consumer",[154,174,175],{},"Kafka에서 이벤트를 읽고 처리하는 애플리케이션",[139,177,178,181],{},[154,179,180],{},"Broker",[154,182,183],{},"Kafka 서버 한 대",[139,185,186,189],{},[154,187,188],{},"Cluster",[154,190,191],{},"여러 Broker를 묶은 Kafka 시스템",[139,193,194,197],{},[154,195,196],{},"Topic",[154,198,199],{},"같은 종류의 이벤트를 모아두는 이름 있는 로그",[139,201,202,205],{},[154,203,204],{},"Partition",[154,206,207],{},"Topic을 병렬 처리하기 위해 나눈 실제 로그 조각",[139,209,210,213],{},[154,211,212],{},"Key",[154,214,215],{},"메시지가 들어갈 Partition을 결정할 때 사용하는 값",[139,217,218,221],{},[154,219,220],{},"Offset",[154,222,223],{},"Partition 안에서 메시지의 위치를 나타내는 번호",[139,225,226,229],{},[154,227,228],{},"Consumer Group",[154,230,231],{},"일을 함께 나눠 처리하는 Consumer들의 그룹",[139,233,234,237],{},[154,235,236],{},"Commit",[154,238,239],{},"“여기까지 처리했다”는 Offset을 저장하는 행위",[139,241,242,245],{},[154,243,244],{},"Retention",[154,246,247],{},"메시지를 Kafka에 보관하는 기간",[139,249,250,253],{},[154,251,252],{},"Replication",[154,254,255],{},"장애에 대비해 Partition을 여러 Broker에 복제하는 것",[139,257,258,261],{},[154,259,260],{},"Rebalance",[154,262,263],{},"Consumer 수가 변할 때 Partition 담당자를 다시 배정하는 것",[13,265,266],{},"Consumer Group이 헷갈리므로 한 번 더 알아보자",[13,268,269],{},"Topic: order-events\nPartition: P0, P1, P2",[13,271,272],{},"같은 그룹의 Consumer라면 일을 나눈다.",[13,274,275],{},"mail-group\n├─ MailConsumer 1 → P0, P1\n└─ MailConsumer 2 → P2",[13,277,278],{},"서로 다른 그룹이라면 각 그룹이 전체 메시지를 따로 읽는다.",[13,280,281],{},"mail-group      → 모든 주문 이벤트 처리\npoint-group     → 모든 주문 이벤트 처리\nanalytics-group → 모든 주문 이벤트 처리",[13,283,284],{},"Kafka는 Consumer Group을 이용해 작업 분산과 Publish\u002FSubscribe를 모두 구현",{"title":286,"searchDepth":287,"depth":287,"links":288},"",2,[289,290,291],{"id":24,"depth":287,"text":25},{"id":52,"depth":287,"text":53},{"id":74,"depth":287,"text":75},[293,294],"Backend","Kafka","2026-08-26T14:08:02+09:00","Kafka의 Producer, Consumer, Topic, Partition, Offset과 KRaft 기반 Docker 구성을 정리한다.","md",null,"\u002Fbackend\u002Fkafka\u002F2026\u002F08\u002F26\u002Ftemp\u002F",{},true,"\u002Fposts\u002Fbackend\u002Fkafka\u002Ftemp",{"title":5,"description":296},"posts\u002FBackend\u002FKafka\u002Ftemp",[294,306,307,308],"KRaft","Docker","EC2","royrUpu_qu_pOJ-87Ae71bZEcrra3roGqFLF6b3FEm8",1788744785286]