read

kafka 를 잊어버린 미래의 나에게 이렇게 설치하고 이렇게 쓰는거야~ 라고 알려주는 목표를 설정하고 글쓰기 하고있습니다.
유툽에서 개발자 글쓰기를 할때 저렇게 설정하고 글을 써보라고 조언하시더군요.

kafka logo

kafka 다운로드 & 설치

다운로드 받아봅시다. https://kafka.apache.org/downloads

2023년 2월 7일자 소스버전은 3.4.0가 최신이군요.
맥 환경인지라 Binary 버전 2.13 으로 받아서 설치해보겠습니다.

Scala 2.13 https://archive.apache.org/dist/kafka/2.8.2/kafka_2.13-2.8.2.tgz

apps 디렉토리에 압축파일을 풀어줍니다. (명령어로든 더블클릭이로든~)

$ mkdir ~/apps
$ cd apps 

접근 용이하게 심볼릭 링크를 걸어주겠습니다.

ln -s kafka_2.13-2.8.2 kafka

참 쉽죵?

$ ll apps 
lrwxr-xr-x 1 willow staff 16B 1 5 17:38 kafka@ -> kafka_2.13-2.8.2
drwxr-xr-x@ 10 willow staff 320B 1 5 17:43 kafka_2.13-2.8.2/

zookeeper 설정 & 구동

zookeeper data 가 저장될 디렉토리를 지정해줍니다.

$ vi ~/apps/kafka/config/zookeeper.properties 
# the directory where the snapshot is stored.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181

zookeeper를 구동해보겠습니다. 2181 포트로 구동되는군요.

$ ~/apps/kafka/bin/zookeeper-server-start.sh ~/apps/kafka/config/zookeeper.properties 
= willow ~/apps/kafka/bin  $ ./zookeeper-server-start.sh ../config/zookeeper.properties 
...
[2023-05-25 17:43:13,562] INFO clientPortAddress is 0.0.0.0:2181 (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
...
[2023-05-25 17:43:13,644] INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCnxnFactory)

zookeeper가 정상 구동되었는지 확인해보겠습니다.

$ telnet 0 2181
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.

zookeeper 쉘을 실행해볼까요?

$ bin/zookeeper-shell.sh localhost:2181 
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is disabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
ls /
[zookeeper]

zookeeper 로그를 확인보겠습니다.
위에서 설정한 zookeeper.properties 경로에 로그가 생성된것을 확인했습니다.

$ ll /tmp/zookeeper/version-2
total 48
-rw-r--r--  1 willow  wheel    64M  1  5 17:47 log.1
-rw-r--r--  1 willow  wheel   424B  1  5 17:43 snapshot.0

kafka 설정 & 구동

kafka 설정 파일을 열어보니 9092 포트가 선언되어 있습니다.

$ vi ~/apps/kafka/config/server.properties

listeners=PLAINTEXT://127.0.0.1:9092

kafka(broker) 서버를 실행합니다. id = 0 서버가 구동되었네요.

$ ~/apps/kafka/bin/kafka-server-start.sh config/server.properties

...
[2023-05-25 17:16:35,827] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)

Topic

Topic은 논리적인 표현으로 Kafka에서 메시지가 저장되는 장소 입니다.

Topic 네이밍이 중요해서 찾아보았습니다.
운영중에 변경하기 어렵기때문에 생성시 알기쉽게 네이밍하는게 중요하더군요.
public 하게 명명하면 운영중 유지보수시 헷갈릴 수 있답니다. ㅠ
현 IOT부서에서는 _(언더바)를 권장하지 않아서 SensorEvent 이런식으로 파스칼 케이스(pascal case) 표기명을 사용하고 있습니다.

토픽 네임 규칙

  • 최대 249자
  • 공백허용 X
  • _. 권장하지 않음

깃헙 소스 내 정의된 규칙은 아래와 같군요. https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/internals/Topic.java

public static final String LEGAL_CHARS = "[a-zA-Z0-9._-]";
private static final int MAX_NAME_LENGTH = 249;

topic를 생성해보겠습니다.

$ ~/apps/kafka/bin/kafka-topics.sh --create --topic willow --bootstrap-server localhost:9092
Created topic willow.

생성된 topic 를 확인해봅니다.

$ ~/apps/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
willow

producer & consumer

topic을 생성해보았으니 프로듀서와 컨슈머를 사용해보겠습니다.

producer

$ ~/apps/kafka/bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic willow 
>11
>22

consumer

$ ~/apps/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic willow                  
11
22

$ ~/apps/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic willow --from-beginning
11
22

topics 토픽 확인

$ ~/apps/kafka/bin/zookeeper-shell.sh localhost:2181
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is disabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

ls /
[admin, brokers, cluster, config, consumers, controller, controller_epoch, feature, isr_change_notification, latest_producer_id_block, log_dir_event_notification, zookeeper]
ls /brokers
[ids, seqid, topics]
ls /brokers/ids
[0]
ls /brokers/topics
[__consumer_offsets, willow, greenpine]


로그 확인

로그 디렉토리를 살펴볼까요?

$ ll ~/apps/kafka/tmp/kafka-logs/           
total 32
-rw-r--r--  1 willow  wheel     0B  1  6 17:16 cleaner-offset-checkpoint
drwxr-xr-x  6 willow  wheel   192B  1  6 17:22 willow-0/
drwxr-xr-x  6 willow  wheel   192B  1  6 17:29 greenpine-0/
-rw-r--r--  1 willow  wheel     4B  1  6 17:30 log-start-offset-checkpoint
-rw-r--r--  1 willow  wheel    88B  1  6 17:16 meta.properties
-rw-r--r--  1 willow  wheel    33B  1  6 17:30 recovery-point-offset-checkpoint
-rw-r--r--  1 willow  wheel    33B  1  6 17:30 replication-offset-checkpoint

$ ll ~/apps/kafka/tmp/kafka-logs/willow-0
total 16
-rw-r--r--  1 willow  wheel    10M  1  6 17:29 00000000000000000000.index
-rw-r--r--  1 willow  wheel   302B  1  6 17:29 00000000000000000000.log
-rw-r--r--  1 willow  wheel    10M  1  6 17:29 00000000000000000000.timeindex
-rw-r--r--  1 willow  wheel     8B  1  6 17:29 leader-epoch-checkpoint

$ cat ~/apps/kafka/tmp/kafka-logs/willow-0/00000000000000000000.log

Kafka

Blog Logo

Weeping Willow


Published

Image

Willow's Blog

Welcome!

Back to Overview