๐ Kafka ํ๋ก๋น์ ๋ ( ๊ฐ๋ฐ๊ณ )
๐ณ๏ธโ๐ [๊ถ๊ธํ์ ]
๐๋ชฉ์ฐจ
| ๊ตฌ์ฑ ์์ | ์ญํ ๋ฐ ์ค์ ๋ด์ฉ |
|---|---|
| Kafka Brokers | - ์ต์ 3๋ ์ด์ ๊ตฌ์ฑ - ๊ณ ์ฑ๋ฅ ๋์คํฌ (์: NVMe) - JVM Heap Size ( -Xmx, -Xms) ๋์ผํ๊ฒ ์ค์ - num.io.threads, num.network.threads ์ ์ ์กฐ์ |
| Producers | - batch.size, linger.ms ์กฐ์ ์ผ๋ก throughput ํฅ์- compression.type=snappy ์ถ์ฒ- acks=all, retries ์ค์ ์ผ๋ก ์์ ์ฑ ๊ฐํ |
| Consumers | - Consumer Group์ผ๋ก ๋ณ๋ ฌ ์ฒ๋ฆฌ - max.poll.records, fetch.min.bytes, fetch.max.wait.ms ์ค์ ์ต์ ํ- offset ์๋ ์ปค๋ฐ ์ค์ ( enable.auto.commit=false) |
| Partition ์ค๊ณ | - ํ ํฝ๋น ํํฐ์
์๋ CPU ์ * 2 ์ด์ ๊ถ์ฅ - ํํฐ์ ํค๋ฅผ ํตํ workload ๋ถ์ฐ - ๋ฆฌ๋ ๋ธ๋ก์ปค ๊ณ ๋ฅด๊ฒ ๋ถ์ฐ |
| Replication | - ๊ฐ ํ ํฝ replication.factor๋ 3 ์ด์- ISR(In-Sync Replica) ๋ชจ๋ํฐ๋ง ์ค์ - ์ฅ์ ๋ณต๊ตฌ ๋๋น ๊ตฌ์ฑ |
| Storage | - log.retention.hours, log.segment.bytes ํ๋- ์ฅ๊ธฐ ์ ์ฅ ์ S3, HDFS ์ฐ๋ ๊ณ ๋ ค - ๋์คํฌ Full ๋ฐฉ์ง๋ฅผ ์ํ ๋ชจ๋ํฐ๋ง |
| Monitoring | - Prometheus + Grafana + Kafka Exporter ๊ถ์ฅ - Alertmanager ์ฐ๋์ผ๋ก ์ด์ ๊ฐ์ง - lag, throughput, ISR ๋ฑ ์ฃผ์ ์งํ ํ์ธ |
| Scale-out ์ ๋ต | - broker ์ ๋๋ ํํฐ์
์ ์ฆ๊ฐ๋ก ํ์ฅ - ์๋ ๋ฆฌ๋ฐธ๋ฐ์ฑ ์ฃผ์ (๋์ ์ฒ๋ฆฌ๋ ๊ณ ๋ ค) - ํ ํฝ/ํํฐ์ ๋ฐฐ์น ์ต์ ํ ํ์ |
| ํญ๋ชฉ | Zookeeper ๊ธฐ๋ฐ Kafka | KRaft ๊ธฐ๋ฐ Kafka (Zookeeper-less) |
|---|---|---|
| ๋ฉํ๋ฐ์ดํฐ ๊ด๋ฆฌ | ์ธ๋ถ Zookeeper์์ ๊ด๋ฆฌ | Kafka ์์ฒด์ Controller Quorum์์ ๊ด๋ฆฌ |
| ๊ตฌ์ฑ ๋ณต์ก๋ | Zookeeper ๋ณ๋ ์ค์น/์ด์ ํ์ | Zookeeper ๋ถํ์ โ ๊ตฌ์ฑ ๋จ์ํ |
| ์์ ๋ฒ์ | Kafka 0.x ~ ํ์ฌ (Legacy) | Kafka 2.8 (preview), Kafka 3.3๋ถํฐ ์์ ํ |
| ๋ณต์ ๋ฐฉ์ | Zookeeper - ZAB ํ๋กํ ์ฝ | Kafka Raft (KRaft) ํ๋กํ ์ฝ ์ฌ์ฉ |
| Controller ๊ตฌ์กฐ | ๋จ์ผ active controller + standby | Multi-controller (Raft quorum ๊ธฐ๋ฐ) |
| ๊ณ ๊ฐ์ฉ์ฑ | Zookeeper ์ฅ์ ์ controller ์ ์ถ ์ง์ฐ | Raft quorum์ผ๋ก ๋น ๋ฅธ failover ๊ฐ๋ฅ |
| ์ด์ ๋ณต์ก๋ | Zookeeper์ Kafka ๋ฒ์ /๊ตฌ์ฑ ๊ด๋ฆฌ ํ์ | Kafka ํ๋๋ก ํตํฉ๋์ด ์ด์ ๊ฐํธ |
| ๋ณด์ ์ค์ | Kafka โ Zookeeper ๊ฐ ACL ๋ณ๋ ๊ด๋ฆฌ ํ์ | Kafka ๋ด ์ผ์ํ๋ ๋ณด์ ๊ด๋ฆฌ ๊ฐ๋ฅ |
| ์ฑ๋ฅ/์ง์ฐ | Zookeeper์์ ํต์ ์ง์ฐ ์กด์ฌ | ๋ ๋น ๋ฅธ controller ๋ฐ์ ๊ฐ๋ฅ |
| ์ด์์ฑ/ํด๋ผ์ฐ๋ | Stateful ์๋น์ค + ์ธ๋ถ ์ข ์์ฑ | Zookeeper ์์ด ํด๋ผ์ฐ๋ ๋ฐฐํฌ ์ฉ์ด |
| ์ง์ ํํฉ | ํ์ฌ๊น์ง ์์ ์ ์ด์๋จ | Kafka 3.5+์์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ก ์ ์ฐจ ์ ํ ์ค |
Kafka 3.x ์ด์์ด๋ผ๋ฉด KRaft ๋ชจ๋ ๊ณ ๋ ค.์์ ์ ์ด์ ์ํด ๋ณ๋ ๋ ธ๋ ๊ตฌ์ฑ ๊ถ์ฅ.
๋๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ HDFS, S3, Iceberg, Delta Lake ๋ฑ๊ณผ ์ฐ๊ณ.
Kafka Connect, Flink, Spark Streaming ์ฌ์ฉ ๊ฐ๋ฅ.
| ๊ตฌ์ฑ ์์ | ์ค์ ํญ๋ชฉ | ์ค๋ช | ์ถ์ฒ ๊ฐ | ์ค์ ํจ๊ณผ | ํธ๋ ์ด๋์คํ / ์ฃผ์์ฌํญ |
|---|---|---|---|---|---|
| Producer | acks | ๋ฉ์์ง ์์ ํ์ธ ์์ค | all | ๋ชจ๋ replica์ ์ ์ฅ๋ ๋๊น์ง ๋๊ธฐ โ ๋ฐ์ดํฐ ์์ ์ฑ โ | latency โ, throughput โ ๊ฐ๋ฅ |
| Producer | retries | ์ ์ก ์คํจ ์ ์ฌ์๋ ํ์ | 5 ์ด์ | ๋คํธ์ํฌ ์ค๋ฅ ๋ฑ ์ฌ์๋ ์ฒ๋ฆฌ โ ์ ๋ขฐ์ฑ โ | ์์ ๋ณด์ฅ ์ํด max.in.flight.requests.per.connection ์กฐ์ ํ์ |
| Producer | batch.size | ๋ฐฐ์น ์ ์ก ํฌ๊ธฐ (bytes) | 32KB~512KB | ์ฌ๋ฌ ๋ฉ์์ง๋ฅผ ๋ชจ์ ์ ์ก โ ๋คํธ์ํฌ ํจ์จ โ | ๋๋ฌด ํฌ๋ฉด latency โ |
| Producer | linger.ms | ๋ฐฐ์น ์ ๋๊ธฐ ์๊ฐ (ms) | 5~10ms | ๋ฉ์์ง ๋ชจ์ ์๊ฐ ํ๋ณด โ Throughput โ | latency โ ๊ฐ๋ฅ์ฑ |
| Producer | compression.type | ๋ฉ์์ง ์์ถ ๋ฐฉ์ | snappy, lz4 | ๋ฐ์ดํฐ ์ ์ก๋ โ โ throughput โ | CPU ์ฌ์ฉ๋ ์ฆ๊ฐ |
| Producer | max.in.flight.requests.per.connection | ๋์ ์ ์ก ์์ฒญ ์ | 1~5 | ๋์ ๊ฐ์ผ๋ก throughput โ | retries์ ํจ๊ป ์์ ๊ผฌ์ ์ฃผ์ |
| Broker | num.network.threads | ๋คํธ์ํฌ IO ์ฒ๋ฆฌ ์ค๋ ๋ ์ | CPU ์์ ์ ๋ฐ | ์์ฒญ ์ฒ๋ฆฌ ์ฑ๋ฅ ํฅ์ | CPU ์ฌ์ฉ๋ ์ฆ๊ฐ |
| Broker | num.io.threads | ๋์คํฌ IO ์ค๋ ๋ ์ | CPU ์ ๋๋ ๊ทธ ์ด์ | ๋ณ๋ ฌ ๋์คํฌ ์ฒ๋ฆฌ ๊ฐ๋ฅ โ ์ฑ๋ฅ โ | context switching ๊ณผ๋ค ๊ฐ๋ฅ์ฑ |
| Broker | socket.send.buffer.bytessocket.receive.buffer.bytessocket.request.max.bytes | ์์ผ ๋ฒํผ ํฌ๊ธฐ | 128KB ~ 512KB | ๋์ฉ๋ ์ ์ก ํจ์จ โ | ๊ณผ๋ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ธ์ฆ |
| Broker | log.segment.bytes | ๋ก๊ทธ ์ธ๊ทธ๋จผํธ ์ต๋ ํฌ๊ธฐ | 1GB ์ด์ | ์ธ๊ทธ๋จผํธ ํ์ผ ๋จ์ ์กฐ์ ๊ฐ๋ฅ | ๋๋ฌด ์์ผ๋ฉด ์ธ๊ทธ๋จผํธ ์ ์ฆ๊ฐ๋ก ๊ด๋ฆฌ ๋ถ๋ด |
| Broker | log.retention.hours | ๋ฉ์์ง ๋ณด๊ด ๊ธฐ๊ฐ | ์ ๋ฌด ์๊ฑด์ ๋ฐ๋ผ | ์๋ ์ญ์ ์ฃผ๊ธฐ ์ค์ ๊ฐ๋ฅ | ๊ธธ๋ฉด ๋์คํฌ ๊ณต๊ฐ ๋ถ์กฑ ๊ฐ๋ฅ |
| Broker | message.max.bytes | ๋จ์ผ ๋ฉ์์ง ์ต๋ ํฌ๊ธฐ | 1MB ~ 10MB | ๋์ฉ๋ ๋ฉ์์ง ํ์ฉ | ๋๋ฌด ํฌ๋ฉด ์ฒ๋ฆฌ ๋ถ๋ด, ์์ผ๋ฉด ์ ์ก ์คํจ |
| Broker | replica.fetch.max.bytes | ๋ฆฌ๋ โ ํ๋ก์ ๋ณต์ ์ ์ต๋ ํฌ๊ธฐ | 10MB ~ 50MB | ๋ณต์ ํจ์จ โ | ๋๋ฌด ํฌ๋ฉด ๋์คํฌ IO ๋ถ๋ด, ์์ผ๋ฉด ์ง์ฐ ๋ฐ์ |
| Broker | num.partitions | ํํฐ์ ์ | workload ๊ธฐ๋ฐ (์: 12, 24 ๋ฑ) | ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ ์ฆ๊ฐ | ํํฐ์ ์ ๋ง์ผ๋ฉด ๋ฉํ๋ฐ์ดํฐ/๋ฆฌ๋ ๊ด๋ฆฌ ์ค๋ฒํค๋ ์ฆ๊ฐ |
| Consumer | fetch.min.bytes | ์ต์ fetch ํฌ๊ธฐ | 1KB ~ 50KB | ๋ฐ์ดํฐ ๋ชจ์์ ๊ฐ์ ธ์ค๊ธฐ โ ๋์ญํญ ํจ์จ โ | ๋๋ฌด ํฌ๋ฉด ์ฒ๋ฆฌ ์ง์ฐ ๊ฐ๋ฅ์ฑ โ |
| Consumer | fetch.max.wait.ms | ์ต๋ ๋๊ธฐ ์๊ฐ | 100 ~ 500ms | ๋ฐ์ดํฐ ๋ถ์กฑ ์ ๋๊ธฐ ์๊ฐ ์ ํ | ๋๋ฌด ๊ธธ๋ฉด ์๋ต ์ง์ฐ, ์งง์ผ๋ฉด polling ์ฆ๊ฐ |
| Consumer | max.poll.records | poll ๋น ๋ ์ฝ๋ ์ | 500 ~ 5000 | ๋ฉ์์ง ์ฒ๋ฆฌ๋ ์กฐ์ ๊ฐ๋ฅ | ๋๋ฌด ํฌ๋ฉด ์ฒ๋ฆฌ ์ง์ฐ, ๋๋ฌด ์์ผ๋ฉด poll ๊ณผ๋ค ๋ฐ์ |
| Consumer | enable.auto.commit | ์๋ offset ์ปค๋ฐ | false ๊ถ์ฅ | ์๋ ์ปค๋ฐ ๊ฐ๋ฅ โ ๋ฐ์ดํฐ ์ ์ด โ | ๊ฐ๋ฐ์๊ฐ ์ปค๋ฐ ์ง์ ๊ตฌํํด์ผ ํจ |
| Consumer | max.partition.fetch.bytes | ํํฐ์ ๋น fetch ํฌ๊ธฐ | 1MB ~ 10MB | ๋์ฉ๋ ๋ฉ์์ง ์ฒ๋ฆฌ ๊ฐ๋ฅ | ๋๋ฌด ์์ผ๋ฉด fetch ํ์ โ |
| Consumer | session.timeout.ms | ์ปจ์๋จธ ์ฅ์ ํ์ง ์๊ฐ | 10000 (10์ด) ์ด์ | ๋น ๋ฅธ ์ฅ์ ํ์ง ๊ฐ๋ฅ | ๋๋ฌด ์งง์ผ๋ฉด false positive โ |