1. ksqlDB로 실시간 데이터 변환 및 스트림 처리
HyunSoo Kim
Senior Solutions Engineer, Korea SE Team Lead, 상무
Confluent
2. Copyright 2020, Confluent, Inc. All rights reserved. This document may not be reproduced in any manner without the express written permission of Confluent, Inc.
주제
2
❑ 환영 인사 👋 및 워크샵 관련 도움말
❑ 프레젠테이션: Confluent ksqlDB 개요 및 이용 사례
❑ 워크샵: ksqlDB를 집중적으로 사용해보는 Hands-on Lab
❑ Q&A
3. C O N F I D E N T I A L
3
워크샵 팁 및 도움말:
1. 세션이 진행되는 동안 '채팅' 창에서 지침을 확인하세요.
[Zoom 하단의 도구 모음에 있는 아이콘]
2. 기술적인 문제가 있는 경우
'손 들기' 버튼을 클릭하거나 '채팅' 창에 글을 올려주세요.
[Confluent 팀원이 도와드립니다.]
3. 이 세션은 대화형 세션이므로 Zoom 하단의 도구 모음에 있는 'Q&A 버튼'을 활용해 질문을
해주시기 바랍니다. 세션이 끝나기 전에 'Q&A' 시간도 가질 예정입니다.
5. • 코딩이 필요 없는 경량 SQL 구문으로 스트림 처리 지원
• 실시간으로 데이터 스트림을 처리하는 가장 간단한 방법
• 기본적으로 Apache Kafka 기반: 확장 가능, 분산형, 실전 테스트 통과
• Confluent에서 소유하고 유지 보수하는 커뮤니티 컴포넌트: github 리포지토리 confluentinc/ksql
• ksqlDB는 스트림 처리 애플리케이션을 구축하는 데 필요한 운영 복잡성을 대폭 절감
ksqlDB: 이벤트 스트리밍 데이터베이스
5
7. Stream
• 순서가 있고 파티셔닝되며 일반적으로 무제한의 Event/Row 시퀀스
• 자연스러운 순서는 Kafka의 파티션별 순서, 즉 스토리지의 topic-partition-offsets임
• Row은 일단 생성된 후에는 변경 불가능(추가만 가능)
• 파티셔닝을 위해 선택적으로 고유하지 않은 ‘Key'를 가질 수 있음
• Stream, Table 또는 Kafka Topic에서 새 Stream 생성 가능
• Stream은 지속되고 재사용되며, Stream을 만든 사용자에게만 국한되지 않음
• 참고: UX 연구에 따르면 사용자는 전용 ‘Stream' 추상화를 선호
7
-- Kafka Topic에서 Stream을 생성하거나 필요한 경우 Topic을 자동 생성합니다.
-- 모든 메시지는 Stream에서 새로운 Record로 간주됩니다.
CREATE STREAM locations (username VARCHAR KEY, location VARCHAR, transport VARCHAR)
WITH (kafka_topic='locations', value_format='json', ...);
-- 다른 Strea에서 Stream 생성
CREATE STREAM myStream AS SELECT location AS city FROM locations EMIT CHANGES;
8. Table(~ RDBMS materialized view)
• 순서가 지정되지 않고 파티셔닝되며 일반적으로 제한된 Event/Row 모음
• Row은 변경 가능하며 ‘Primary Key'가 있어야 함
• Stream, Table 또는 Kafka Topic에서 새 Table 생성 가능
• Table은 지속적이고 재사용 가능
8
bob 1
alice 2
사용자
방문
위치
-- 다른 Table에서 지속적으로 업데이트되는 Table 생성
CREATE TABLE myTable AS SELECT * FROM originalTable EMIT CHANGES
-- Kafka Topic의 메시지에서 지속적으로 업데이트되는 Table 생성
-- 변경 로그로 해석: 동일한 Key를 가진 메시지는 해당 Key에 대한 UPDATE로
-- 간주되고 'null' 값이 있는 메시지는 해당 Key에 대한 DELETE임.
CREATE TABLE myTable (user VARCHAR PRIMARY KEY, visited BIGINT,...)
WITH (kafka_topic='users', value_format='json', ...);
9. ‘Continuous’ vs. ‘Classic’ Queries
9
• ‘Continuous’ aka Push Queries: EMIT 절은 쿼리를 영구적으로 실행
• 생각: 클라이언트가 쿼리를 실행하고 실시간으로 변경되는 결과를 구독할 수 있습니다.
-- Table의 데이터를 지속적으로 조회하고 쿼리가 계속 실행됨
SELECT * FROM myTable WHERE ... EMIT CHANGES
-- Stream의 데이터를 지속적으로 조회하고 쿼리가 계속 실행됨
SELECT * FROM myStream WHERE ... EMIT CHANGES
앱
-- Table의 데이터를 한 번 조회한 후 쿼리 종료
SELECT * FROM myTable WHERE ...
앱
• ‘Classic’ aka Pull Queries * 최근에 추가된 ksqlDB 기능
• 생각: 클라이언트가 테이블의 현재 내용(상태)을 가져올 수 있습니다.
10. 10
Filters CREATE STREAM high_readings AS
SELECT sensor,
reading,
FROM readings
WHERE reading > 41
EMIT CHANGES;
12. 12
Aggregate CREATE TABLE avg_readings AS
SELECT sensor,
AVG(reading) AS location
FROM readings
GROUP BY sensor
EMIT CHANGES;
13. C O N F I D E N T I A L
Confluent Cloud
동적 성능 및 탄력성
자동 밸런싱 및 업그레이드
유연한 DevOps 자동화
CLI | Terraform | Operator | Ansible
GUI 기반 관리 및 모니터링
클라우드 대시보드 | Metrics API
규모에 맞는
효율적인 운영
선택의 자유
커미터 기반의 전문성
이벤트 스트리밍 데이터베이스
ksql
풍부한 사전 구축 에코시스템
Connectors | Hub | Schema Registry
다국어 개발
비 Java 클라이언트 | REST 프록시
폭넓은 탄력성
Replicator
데이터 호환성
Schema Registry
엔터프라이즈급 보안
SSO/SAML | ACL
아키텍트
운영자
개발자
오픈 소스 | 커뮤니티 라이선스
제한없는 생산성 증대 프로덕션 단계 전제조건
완전 관리형 클라우드 서비스
자체 관리형 소프트웨어
교육 파트너
엔터프라이즈
지원
프로페셔널 서비스
Apache Kafka
15. C O N F I D E N T I A L 15
Confluent Cloud 계정 가입하기
● 계정 생성하기: https://www.confluent.io/ko-kr/get-started/
● 가입 완료하면 계정 로그인 후 우측 상단에 있는 메뉴 아이콘을 클릭하고 "Billing & payment"를
클릭한 다음 "Payment details & contacts"에 결제 정보를 입력합니다.
● Confluent Cloud 계정에 가입하면 처음 2개월 동안 Confluent Cloud 명세서에서 최대 400달러가
공제됩니다.
● 참고: 이 워크샵에서는 비용이 발생하는 리소스를 생성하게 됩니다. 400달러의 크레딧으로 워크샵
중에 생성한 리소스 비용을 충당합니다. 추가 비용이 발생하지 않도록 "클러스터를 스핀다운"하세요.
랩 가이드:
https://github.com/confluentinc/commercial-workshops/tree/master/series-getting-started-w
ith-cc/workshop-ksql
16. C O N F I D E N T I A L
워크샵 내용
16
- ksqlDB 스트림 프로세싱 애플리케이션 만들기
- Continuous Transformations 수행
- Materialized view 구축하기
- Materialized view 대상 lookup 확인하기
17. C O N F I D E N T I A L
워크샵 아키텍처
17
Confluent Cloud
ksqlDB
(Fully-managed)
DataGen Connector
(Fully-managed)
users_topic
stocks_topic
DataGen Connector
(Fully-managed)
users
Table
stocks
Stream
stocks_enriched
Stream
Join
stocks_purchas
ed_today Table
Tumbling
Windows
number_of_times_
stock_bought
Table
Aggregate
18. C O N F I D E N T I A L
인증샷 이벤트
18
맨 마지막 “Pull Queries” 챕터의 3번 항목을 수행한 결과를 캡처해서
메일(korea-marketing@confluent.io)로 전송
https://github.com/confluentinc/commercial-workshops/tree/master/series-getting-started-with-cc/workshop-ksql#pull-queries