본문 바로가기

빅데이터/Kafka

KSQL - Docker을 사용한 KSQL server, cli 설치 및 실행

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