KSQL은 SQL을 사용하여 Kafka topic으로 들어오는 record들에 대해 query문을 작성하여 transform하거나 aggregation등을 수행할 수 있게 만들어준다. KSQL을 작성하고 사용하기 위해서는 KSQL 서버가 반드시 필요한데, 이번 포스팅에서는 KSQL 서버를 Docker를 사용하여 설치 및 실행해보고자 한다.
1. KSQL 서버 설치 및 실행
본인의 macbook에서 docker image로 실행하기 때문에 아래와 같이 command를 실행한다.
$ docker run \
-p 127.0.0.1:8088:8088 \
-e KSQL_BOOTSTRAP_SERVERS=localhost:9092 \
-e KSQL_LISTENERS=http://0.0.0.0:8088/ \
-e KSQL_KSQL_SERVICE_ID=ksql_standalone_1_ \
confluentinc/cp-ksql-server:5.3.1
KSQL_BOOTSTRAP_SERVERS : kafka와 연결되는 9092 port의 server들 셋팅
KSQL_LISTENERS : KSQL과 통신할 REST API endpoint
KSQL_KSQL_SERVICE_ID : KSQL서버의 service ID
2. KSQL 서버 실행 확인
http://localhost:8088/ 로 접속하여 정상적으로 sql server가 떠 있는지 확인할 수 있다.
혹은 docker process 명령어로 image가 떠있는지 확인할 수도 있다.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b6fbedf0323 confluentinc/cp-ksql-server:5.3.1 "/etc/confluent/dock…" 7 minutes ago Up 7 minutes 127.0.0.1:8088->8088/tcp zen_knuth
3. KSQL cli 실행
KSQL 서버에 붙어서 sql 명령을 내리기 위해서는 cli docker도 필요하다. 아래와 같은 command로 cli를 실행할 수 있다.
$docker run --net=host --interactive --tty \
confluentinc/cp-ksql-cli:5.3.1 \
http://localhost:8088
위 code에서 중요한 것은 --net=host 를 넣어야한다는 점이다. docker내부에서 외부의 localhost:8088(KSQL server)에 접속할 때 옵션을 넣지 않으면 아래와 같은 오류가 발생하기 때문이다.
*************************************ERROR**************************************
Remote server at http://0.0.0.0:8088 does not appear to be a valid KSQL server.
Please ensure that the URL provided is for an active KSQL server.
The server responded with the following error:
Error issuing GET to KSQL server. path:/
Caused by: java.net.ConnectException: Connection refused (Connection refused)
Caused by: Could not connect to the server.
********************************************************************************
4. KSQL cli 실행 확인
3번에서 정상적으로 KSQL cli가 docker로 띄워졌다면 아래와 같이 sql을 작성할 수 있는 화면이 나온다.
$ docker run --net=host --interactive --tty \
confluentinc/cp-ksql-cli:5.3.1 \
http://localhost:8088
===========================================
= _ __ _____ ____ _ =
= | |/ // ____|/ __ \| | =
= | ' /| (___ | | | | | =
= | < \___ \| | | | | =
= | . \ ____) | |__| | |____ =
= |_|\_\_____/ \___\_\______| =
= =
= Streaming SQL Engine for Apache Kafka® =
===========================================
Copyright 2017-2018 Confluent Inc.
CLI v5.3.1, Server v5.3.1 located at http://localhost:8088
Having trouble? Type 'help' (case-insensitive) for a rundown of how things work!
ksql>
ksql> 뒤에 ksql에서 지원하는 sql문법의 query를 작성하면 명령어를 실행할 수 있다.
ksql> show topics;
Kafka Topic | Registered | Partitions | Partition Replicas | Consumers | ConsumerGroups
----------------------------------------------------------------------------------------------------------------------------------
burrow-metrics | false | 2 | 2 | 0 | 0
test11111-dev | false | 2 | 2 | 0 | 0
test11111_encryption_test-local | false | 2 | 2 | 0 | 0
참고 : https://docs.confluent.io/current/ksql/docs/installation/install-ksql-with-docker.html
'빅데이터 > Kafka' 카테고리의 다른 글
Airbnb에서 Kafka의 활용 (0) | 2019.10.14 |
---|---|
Kafka의 KSQL 컨셉, 아키텍쳐, 용어, 커스텀 function 적용하는 방법 (0) | 2019.10.11 |
아파치 카프카 테스트용 data generator 소개 - ksql-datagen (0) | 2019.10.10 |
[빅데이터]Kafka stream과 KSQL 소개 및 설명, 차이점 (3) | 2019.10.08 |
[KAFKA]commitSync() 사용시 rebalance발동시 offset variable을 초기화 해야하는 이유? (0) | 2019.09.30 |
Kafka consumer의 Automatic Commit은 중복이 생길 수 있다 (1) | 2019.09.25 |