본문 바로가기
BIG-DATA/KAFKA

[KAFKA] 무작정 시작하기 (3) - Kafka 설정

by 허도치 2019. 11. 20.

  지난 포스트에서는 zookeeper에 대해서 간략하게 알아보고, zookeeper-server를 실행하기위한 zookeeper.properties를 작성하였다. 이번 포스트에서는 kafka에 대해서 알아보고, kafka-server를 실행하기위한 server.properties를 작성해보자.

 

 

1. Kafka란?

   1-1. Apache에서 스칼라로 개발한 오픈소스 메시지 브로커.

   1-2. 실시간 데이터 피드를 관리하기 위해 통일된, 높은 처리량, 낮은 지연시간을 지닌 플랫폼을 제공하는 것이 목표.

   1-3. 분산 트랜잭션 로그로 구성된 pub/sub 메시지 큐이며, 대용량의 스트리밍 데이터를 처리하기에 적합함.

         - pub/sub ( 발행/구독 )은 한명이 데이터를 올리면 다른 사람들은 그 데이터를 가져다가 쓰는 구조.

   1-4. 주요 용어

         - broker: 메시지 큐, 메시지를 관리하는 주체이며 prodcuer로 부터 받은 메시지를 topic별로 분류하는 역할.

         - topic: 분류된 메시지의 집합.

         - producer: 메시지 큐에 데이터를 적재하는 주체.

         - consumer group: broker 수집된 메시지를 소비하는 concumer의 집합.

         - consumer: 메시지 큐에 적재된 데이터를 소비하는 주체.

         - offset: 메시지 큐의 위치값, consumer group별로 offset이 관리됨.

         - replication: 하나의 동일한 topic을 여러개의 broker가 관리함. ( Leader와 Follwer 구조 )

         - partition: 파티션의 수 만큼 topic을 broker에 균등하게 분배.

 

 

2. Kafka 설정

    2-1. server.properties 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# Broker의 ID로 Cluster내에서 Broker를 구분하기위해 사용.
broker.id=0
 
# 생성되지 않은 토픽을 자동으로 생성할지 여부. 기본값은 true.
auto.create.topics.enable=false
 
# Broker가 받은 데이터를 관리위한 저장공간.
log.dirs=C:/work/kafka_2.12-2.1.0/data/kafka
 
# Broker가 사용하는 호스트와 포트를 지정, 형식은 PLAINTEXT://your.host.name:port 을 사용
listeners=PLAINTEXT://:9092
 
# Producer와 Consumer가 접근할 호스트와 포트를 지정, 기본값은 listeners를 사용.
advertised.listeners=PLAINTEXT://localhost:9092
 
# 서버가 받을 수 있는 메세지의 최대 크기, 기본값 1MB.
# Consumer에서는 fetch.message.max.bytes를 사용하는데
# message.max.bytes >= fetch.message.max.bytes로 조건에 맞게 잘 설정해야한다.
message.max.bytes=1000000
 
# 네트워크 요청을 처리하는 쓰레드의 수, 기본값 3.
num.network.threads=3
 
# I/O가 생길때 마다 생성되는 쓰레드의 수, 기본값 8.
num.io.threads=8
 
# 서버가 받을 수 있는 최대 요청 사이즈이며, 서버 메모리가 고갈 되는걸 방지함.
# JAVA의 Heap 보다 작게 설정해야 함, 기본값 104857600.
socket.request.max.bytes=104857600
 
# 소켓 서버가 사용하는 송수신 버퍼 (SO_SNDBUF, SO_RCVBUF) 사이즈, 기본값 102400.
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
 
# 토픽당 파티션의 수를 의미하며, 입력한 수만큼 병렬처리를 할 수 있지만 데이터 파일도 그만큼 늘어남. 기본값 1.
num.partitions=1
 
# 세그먼트 파일의 기본 사이즈, 기본값 1GB.
# 토픽별로 수집한 데이터를 보관하는 파일이며, 세그먼트 파일의 용량이 차면 새로운 파일을 생성.
log.segment.bytes=1073741824
 
# 세그먼트 파일의 삭제 주기, 기본값 hours, 168시간( 7일 ).
# 옵션 [ bytes, ms, minutes, hours ] 
log.retention.hours=168
 
# 세그먼트 파일의 삭제 주기에 따른 처리, 기본값은 delete.
# 옵션 [ compact, delete ]
# compact는 파일에서 불필요한 records를 지우는 방식.
log.cleanup.policy=delete
 
# 세그먼트 파일의 삭제 여부를 체크하는 주기, 기본값 5분.
log.retention.check.interval.ms=300000
 
# 세그먼트 파일의 삭제를 처리할 쓰레드의 수. 기본값 1.
log.cleaner.threads=1
 
# 오프셋 커밋 파티션의 수, 한번 배포되면 수정할 수 없음. 기본값 50.
offsets.topic.num.partitions=50
 
# 토픽에 설정된 replication의 인수가 지정한 값보다 크면 새로운 토픽을 생성하고
# 작으면 브로커의 수와 같게 된다. 기본값 3.
offsets.topic.replication.factor=1
 
# 주키퍼의 접속 정보.
zookeeper.connect=localhost:2181
 
# 주키퍼 접속 시도 제한시간.
zookeeper.connection.timeout.ms=6000
cs

         - 더 많은 정보를 확인하려면 공식 문서를 참조하자.

            https://kafka.apache.org/documentation/#configuration

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

   2-2. Kafka 실행

         - 여기까지 똑같이 따라했다면 문제 없이 정상적으로 실행될 것이다.

 

 

 

지금까지 Kafka에 대해서 알아보고 설정하고 실행까지 해보았다. 서버를 실행하는 것은 어려운 일이 아니기 때문에 문제없이 진행될 것이라고 생각한다. 다음 포스트에서는 Producer와 Consumer를 생성해보도록 하겠다.

 

 

댓글