6. Big Data solves Volume and Variety – not Velocity
7
File
DB
DB
Extract
Enterprise
DW
BI Tools
Search /
Explore
SQL Export
SQL
Search
Service
Data Sources Big Data Platform
Raw
Refined
Storage
Storage Result
Parallel Processing
File Import / SQL Import
Apps
API
Logic
https://www.youtube.com/watch?v=vFshGQ2ndeg&list=WL&index=2&t=231s
7. Big Data solves Volume and Variety – not Velocity
8
Data Sources
File
DB
DB
Extract
Enterprise
DW
BI Tools
Search /
Explore
SQL Export
SQL
Search
Service
Event Sources
IoT Data
Mobile
Data
Location
Stream
Data
Telemetry
Event Hub
- Machine Learning
- Graph Algorithms
- Natural Language Processing
Big Data Platform
Raw
Refined
Storage
Storage Result
Parallel Processing
File Import / SQL Import
Apps
API
Logic
Event Stream
https://www.youtube.com/watch?v=vFshGQ2ndeg&list=WL&index=2&t=231s
다양한 데이터 소스
8. Stream Processing Architecture solves Velocity
9
Data Sources
File
DB
DB
Extract
Enterprise
DW
BI Tools
Search /
Explore
Event Sources
IoT Data
Mobile
Data
Location
Stream
Data
Telemetry
Event Hub
Stream Analytics Platform
Reference / Models
Stream Analytics
Result
Dashboard
Event Stream
Event Stream
Export
SQL
Search
Service Apps
API
Logic
Event Stream
https://www.youtube.com/watch?v=vFshGQ2ndeg&list=WL&index=2&t=231s
9. Big Data for all historical data analysis
10
Data Sources
File
DB
DB
Extract
Enterprise
DW
BI Tools
Search /
Explore
Event Sources
IoT Data
Mobile
Data
Location
Stream
Data
Telemetry
Event Stream
Stream Analytics Platform
Reference / Models
Stream Analytics
Result
Dashboard
Event Stream
Event Stream
Event Hub
Big Data Platform
Raw
Refined
Storage
Storage Result
Parallel Processing
Data Flow
File Import / SQL Import
Export
SQL
Search
Service
Apps
API
Logic
https://www.youtube.com/watch?v=vFshGQ2ndeg&list=WL&index=2&t=231s
10. Big Data for all historical data analysis
11
Data Sources
File
DB
DB
Extract
Enterprise
DW
BI Tools
Search /
Explore
Event Sources
IoT Data
Mobile
Data
Location
Stream
Data
Telemetry
Event Stream
Stream Analytics Platform
Reference / Models
Stream Analytics
Result
Dashboard
Event Stream
Event Stream
Event Hub
Big Data Platform
Raw
Refined
Storage
Storage Result
Parallel Processing
Data Flow
Export
SQL
Search
Service
Apps
API
Logic
File Import / SQL Import
Change Data Capture
https://www.youtube.com/watch?v=vFshGQ2ndeg&list=WL&index=2&t=231s
Confluent
11. 커넥터와 ksqlDB로 데이터 사용 및 가치 증대
12
Microservices
Web
Custom Apps
Monitoring
Analytics
3rd Party Apps
Databases
Data Warehouses
AWS, Azure, GCP
Mainframes
ksqlDB
Kafka Streams
Kafka 기반의 실시간 앱은 데이터를 이벤
트 스트리밍 플랫폼에서 처리
커넥터는 다른 앱이나 데이터 시스템과 연계
하여, 데이터를 가져오거나 대상 시스템에 적
재
스트림 프로세싱은 데이터를 실시간으로 가
공/처리하여 스트림 제공
1 2
3
12. Kafka 를 통한 스트림 프로세싱
DB
CONNECTOR
CONNECTOR
APP
APP
DB
STREAM
PROCESSING
CONNECTOR APP
DB
17. Copyright 2020, Confluent, Inc. All rights reserved. This document may not be reproduced in any manner without the express written permission of Confluent, Inc.
스트림(Stream)과 테이블(Table)
20
Topic Stream
Topic
+
Structure
=
Table
RocksDB
+
=
Stream
18. Data Type : Streams 은 불변의 추가 전용의 연속적인 이벤트
21
Streams
● Useful for representing a historical
series of events
● “Data in motion”
19. Tables
● Represent the latest version of each
value per key
● Serve queries to applications
Data Type : Tables 은 변경가능한 이벤트 컬렉션
22
20. Persistent queries
● Execute continuous computations
over unbounded streams of events
● Derive new collections or
materialized views that are
incrementally updated
Query Type: Persistent queries 는 데이터를 처리하는데 사용
23
21. Query Type: Pull queries 는 materialized view의 현재
상태를 가져온다.
24
Pull queries
● Run with predictably low latency
● Good fit for request/response flows
22. Query Types : Push queries 는 실시간으로 변경되는 것을
구독할 수 있다
25
Push queries
● Emit refinements that quickly react
to new information
● Perfect fit for asynchronous
applications flows
24. ksqlDB 의 다양한 사용사례
• 이상 징후 및 패턴 감지
• Customer360
• 사이버 보안
• 예측 분석
• 실시간 분석
• 물류 및 IoT 관리
• 실시간 경고 및 알림
• 인프라 현대화
https://developer.confluent.io/tutorials
25. Pattern : 생명/보험 - Updating Dashboards
29
Insurance
DB
INSERT INTO app_pipeline
SELECT
COUNT(*)
FROM proposal prop
INNER JOIN application app
ON prop.plan_id = app.plan_id
WHERE app.status IS NOT ‘pending’
GROUP BY prop.id
WINDOW TUMBLING (SIZE 1 hour)
EMIT CHANGES;
Sales
Dashboard
proposal
application
KSQL
app_pipeline
KSQL
hourly_close
INSERT INTO hourly_close
SELECT
SUM(amount)
COUNT(*)
FROM application
GROUP BY id
WHERE app.status IS ‘signed’
WINDOW TUMBLING (SIZE 1 hour)
EMIT CHANGES;
app_pipeline
hourly_close
stream
table
process
각 판매 채널은 실시간 판매 예측을 원하지만 제안
및 응용 프로그램에 대한 데이터는 야간 배치
작업으로 정책 관리자에게 전송된다. 판매
시스템은 이미 구식의 모놀리식 애플리케이션이기
때문에 외부 서비스와 통합되는 기능을 추가하는
데 비용이 많이 든다.
• 데이터베이스 레코드 변경 사항을 스트림으로
캡처 - 앱 또는 기존 데이터베이스에 영향을
주지 않는다.
• 서로 다른 엔터티 처리 - 제안 및 애플리케이션
테이블은 구조적으로 다르다. 처리 수를
추출하는 로직은 별도의 쿼리로 정의할 수 있다.
• 결과는 쉽게 창으로 표시할 수 있다.
Materialized View를 대시보드에서
가져오거나 정기적으로 업데이트로 푸시할 수
있다.
26. Pattern : Payment - Fraud Detection
30
transaction
KSQL
FREQUENCY
bad_trans
Store
INSERT INTO bad_trans
SELECT
account_id,
‘over_limit’,
SUM(amount)
FROM transactions
GROUP BY account_id
HAVING SUM(amount) > 1000000
WINDOW TUMBLING (SIZE 1 HOUR)
EMIT CHANGES;
Admin
Customer
Portal
KSQL
LIMIT
INSERT INTO bad_trans
SELECT
account_id,
‘too_frequent’,
COUNT(*)
FROM transactions
GROUP BY account_id
HAVING COUNT(*) > 10
WINDOW TUMBLING (SIZE 1 DAY)
EMIT CHANGES;
stream
table
process
트랜잭션에서 비정상적인 계정 행동을 실시간으로
감지하여 사기 위험을 최소화한다.
• 하나의 트랜잭션 스트림은 서로 다른 규칙에 따라
별도로 대기되며 의심스러운 트랜잭션의 단일
소스로 요약된다.
• 각 규칙은 기존 규칙(시간별 트랜잭션 합계, 일별
트랜잭션 수 등)에 영향을 주지 않고 독립적으로
정의할 수 있다.
• 동일한 의심스러운 활동 이벤트는 영업 운영
대시보드에 요약, 최종 사용자 고객의 모바일 앱에
직접 푸시 등 다양한 용도로 사용할 수 있다.
27. Pattern : Payment - Fraud Detection ver.2
31
transaction
KSQL
Detect
fishy_account
Store
CREATE STREAM fishy_account AS
SELECT
account.id,
COUNT(*)
FROM transaction trans
INNER JOIN account
ON trans.account_id = account.id
GROUP BY account.id
HAVING COUNT(*) >= 10
WINDOW TUMBLING (SIZE 30 MINUTES)
EMIT CHANGES;
Customer
Portal
account
KSQL
SUSPEND
CREATE STREAM suspended AS
SELECT
transaction.id
account.id,
transaction.amount
FROM fishy_account
INNER JOIN transaction
ON bad_trans.account_id
= transaction.account.id
EMIT CHANGES;
Admin
Customer
Portal
suspended
stream
table
process
ksqlDB는 더 복잡한 조건을 채택할 수 있다 - 30분
이내에 10회 이상 트랜잭션을 업데이트되는 계정을
감지한다.
• 계정정도는 계정정보가 업데이트될 때만 변경됨 -
계정 정보를 변경하지 않는 자주 사용하는 사용자는
캡처되지 않는다.
• 모바일 앱을 통해 사용자에게 즉시 계정 알림
• 의심스러운 계정은 일시 중단된다. 백엔드에서 최종
사용자 확인 또는 관리 작업이 필요하다.
28. Pattern : SIEM – 비용 최적화
32
KSQL
Filter
device_logs
KSQL
FIrewall
KSQL
DNS
KSQL
Auth
firewall
dns
auth
KSQL
De-noise
firewall_clean
login
Devices
SIEM
Admin
KSQL
User Map
access_auth
Audit Store
Long-Term Store
Auth
CREATE STREAM device_logs AS
SELECT
event_id,
event_type,
EXPRODE (event)
timestamp,
....
FROM all_logs
WHERE event_type = ‘firewall’
OR event_type = ‘dns’
OR event_type = ‘auth’
EMIT CHANGES;
CREATE STREAM auth AS
SELECT
event,
event_type,
timestamp,
....
FROM device_logs
WHERE event_type = ‘firewall’
EMIT CHANGES;
CREATE STREAM dns AS
SELECT
event,
event_type,
timestamp,
....
FROM device_logs
WHERE event_type = ‘firewall’
EMIT CHANGES;
CREATE STREAM firewall AS
SELECT
event_type,
port,
message,
timestamp,
....
FROM device_logs
WHERE event_type = ‘firewall’
EMIT CHANGES;
CREATE STREAM access_auth AS
SELECT
auth.auth_id,
auth.auth_type,
auth.timestamp,
login.authorized_by
login.timestamp,
....
FROM auth
OUTER_JOIN login
ON auth.login_id = login.login_id
EMIT CHANGES;
all_logs
stream
table
process
SIEM 시스템에 들어가는 로그의 양을 제한한다.
• 다대다 연결(장치-시스템)에서 다대다(장치-유연한
시스템)로 전환하여 연결 수를 최소화한다.
• SIEM 시스템에 도달하기 전에 로그를 정리, 필터링
및 집계한다.
• 로그는 더 저렴한 객체 스토리지에 장기간 저장되며
필요할 때 필요에 따라 추출된다.
29. Pattern : Site Access Analysis
33
stream
table
process
pageviews
KSQL
Female
View
Site
users
Admin
female_per_region
female_views
KSQL
Per
Region
KSQL
Top
Viewer
KSQL
Region
8&9
female_top_viewer
female_region_89
CREATE STREAM female_views AS
SELECT
USERS.ID USERID,
PAGEVIEWS.PAGEID PAGEID,
USERS.REGIONID REGIONID,
USERS.GENDER GENDER
FROM pageviews
LEFT OUTER JOIN USERS users ON
((pageviews.USERID = users.ID))
WHERE (users.GENDER = 'FEMALE')
EMIT CHANGES;
CREATE TABLE female_per_region AS
SELECT
views.GENDER GENDER,
views.REGIONID REGIONID,
COUNT(*) NUMUSERS
FROM FEMALE_VIEWS views
WINDOW TUMBLING ( SIZE 30 SECONDS
)
GROUP BY views.GENDER,
views.REGIONID
HAVING (COUNT(*) > 1)
;
CREATE STREAM female_top_viewer AS
SELECT *
FROM female_views views
WHERE (CAST(SPLIT(views.PAGEID,
'_')[2] AS INTEGER) >= 50)
EMIT CHANGES;
CREATE STREAM female_region_89 AS
SELECT *
FROM female_views views
WHERE ((views.REGIONID LIKE '%_8') OR
(views.REGIONID LIKE '%_9'))
EMIT CHANGES;
실시간 사이트 액세스 분석
• 한 시스템에서 두 개의 다른 스트림을
추출한다. 하나는 페이지 뷰용이고 다른
하나는 사용자 로그인용이다.
• 데이터를 결합하고 필터링한 다음 결과를
다양한 분석 사용 사례에 사용할 수 있다.
• 필요에 따라 결과를 구체화하거나
애플리케이션 시스템으로 스트리밍할 수
있다.
30. Pattern : Gaming - Leaderboard
34
stream
table
process
CREATE TABLE LOSSES_PER_USER AS
SELECT
USER,
COUNT(USER) AS TOTAL_LOSSES
FROM USER_LOSSES
GROUP BY USER;
CREATE TABLE STATS_PER_USER AS
SELECT
UG.USER AS USER,
MAX(UG.GAME->SCORE) AS HIGHEST_SCORE,
MAX(UG.GAME->LEVEL) AS HIGHEST_LEVEL,
MAX(CASE WHEN LPU.TOTAL_LOSSES IS NULL THEN
CAST(0 AS BIGINT) ELSE LPU.TOTAL_LOSSES END) AS TOTAL_LOSSES
FROM USER_GAME UG
LEFT JOIN LOSSES_PER_USER LPU
ON UG.USER = LPU.USER
GROUP BY UG.USER;
Player user_game
user_losses
KSQL
Loss per
User
losses_per_user
KSQL
User
Stats
stats_per_user
Leaderboard
CREATE TABLE SUMMARY_STATS AS
SELECT
'SUMMARY_KEY' AS SUMMARY_KEY,
MAX(GAME->SCORE) AS HIGHEST_SCORE_VALUE,
COLLECT_SET(USER) AS USERS_SET_VALUE
FROM USER_GAME
GROUP BY 'SUMMARY_KEY';
KSQL
Summary
Stats
summary_stats
31. Pattern : Customer 360
35
Customers
create table user as select *
from customers c
inner join marketing_yn m on
c.rowkey=m.rowkey
where
c.age>=20 and
c.gender='M' and
((c.add='SEOUL' or c.add='INCHEON') or
c.add='BUSAN')
emit changes;
사용자 정보
마케팅 동의 정보
stream
table
process
마케팅 동의한 사용자 중 20대의
서울/인천/부산에 거주중인 남성
create stream events_enrich as select *
from events e
inner join user u on e.user_id=u.rowkey
where category_code='electronics.tablet'
partition by e.user_id
emit changes;
create table events_windowed as select
user_id,
array_distinct(collect_list(product_id)) product_id,
timestamptostring(windowstart,'yyyy-MM-
dd','UTC') event_date
from events_enrich
window tumbling(size 24 hours)
group by user_id
having
array_length(array_distinct(collect_list(product_id
)))>=5
emit changes;
이벤트 (거래내역, 구매내역, 사용자 액티비티)
특정 사용자 그룹의 이벤트
하루에 주문거래 5건 이산의 사용자
34. 스트림이나 테이블에 데이터 입력
UI
Native Java
Client
ksql> INSERT INTO people VALUES('Mary', 'Smith');
CLI
ksqlDB
KsqlObject row = new KsqlObject()
.put(“PERSON”, “robin”)
.put(“LOCATION”, “Manchester”);
//insert data into stream
client.insertInto(“MOVEMENTS”, row).get();
RESTFul API
36. Kafka 에 데이터 읽고 / 쓰기
people_topic
CREATE STREAM people
WITH(KAFKA_TOPIC='people_topic',
VALUE_FORMAT='AVRO');
ksqlDB
37. Kafka 에 데이터 읽고 / 쓰기
people_topic
CREATE STREAM people
WITH(KAFKA_TOPIC=‘people_topic',
VALUE_FORMAT='AVRO');
CREATE TABLE departments(
id INT PRIMARY KEY,
name VARCHAR)
WITH(KAFKA_TOPIC='dept_topic',
PARTITIONS=3,
VALUE_FORMAT='AVRO');
ksqlDB
38. Kafka 에 데이터 읽고 / 쓰기
people_topic
CREATE STREAM people
WITH(KAFKA_TOPIC=‘people_topic',
VALUE_FORMAT='AVRO');
CREATE TABLE departments(
id INT PRIMARY KEY,
name VARCHAR)
WITH(KAFKA_TOPIC='dept_topic',
PARTITIONS=3,
VALUE_FORMAT='AVRO');
dept_topic
ksqlDB
41. ksqlDB 에서 다른 시스템 연계하기
CREATE SOURCE CONNECTOR SOURCE_MYSQL_01
WITH (
‘connector.class’ = ‘MySqlConnector’,
‘database.hostname’ = ‘mysql’,
‘table.whitelist’ = ‘demo.customers’);
SOURCES
42. ksqlDB 에서 다른 시스템 연계하기
SINKS
Amazon S3
Google
BigQuer
y
CREATE SINK CONNECTOR
SINK_ELASTIC_01
WITH (
‘connector.class’ =
‘ElasticsearchConnector’,
‘connection.url’ =
‘http://elasticsearch:9200’,
‘topics’ = ‘orders’);
45. Confluent 는 단순히 오픈소스 Apache Kafka 의 엔터프라이즈
버전이 아니다.
49
Fully
Managed
Connectors
Stream
Processing
Enterprise
Security &
Governance
…100s more
features
Confluent Server
Multi-cloud SaaS & Private Cloud
Kafka 는 Cloud Native(클라우드
네이티브)로 완전히 재설계됨
Complete, 엔터프라이즈 급 Data-in-
Motion 플랫폼
완전 관리형 서비스 및 소프트웨어로 언제
어디서나(Everywhere) 사용 가능