본문 바로가기

개발이야기

Udacity 데이터 스트리밍 강의 후기- Apache Kafka

Udacity의 Data streaming Nanodegree program을 듣고 난 후기를 공유하고자 합니다. Nanodegree program은 udacity의 certification program입니다.다. 강의를 모두 수강하고 난 뒤에는 Nanodegree(나노디그리) 라고 하는 학위는 아니고 증명서를 발급받을 수 있습니다. 

 

 

이번에 들은 강의는 Udacity의 데이터스트리밍 강의입니다. 기본적으로 2달의 수강기간을 예상치로 잡고 있으며 Python, SQL, ETL에 대한 기본적인 개념을 가지고 있어야만 수강하는데 문제가 없다고합니다. 가격은 1달에 한화 약 47만원입니다.(2달에 약 80만원)

 

데이터 스트리밍은 현대의 빅데이터 비즈니스모델을 실시간으로 분석하고 처리하기 위해 사용됩니다. 이 강의에서는 apache spark, kafka, spark streaming, kafka streaming에 대해서 설명합니다. 

 

강의 목차

1. Data streaming 실습 및 SQL, Web기반 데이터 모델링 학습

 - Streaming processing에 대한 소개

 - Apache kafka개념 소개 및 실습

 - 데이터 스키마와 Apache Avro

 - Kafka connect와 REST Proxy

 - Stream processing 핵심

 - Faust 기반의 Stream processing 실습

 - KSQL 소개 및 실습

 

2. Streaming API 이론 및 개발

 - Spark 소개

 - Spark의 활용이론

 - Spark 디버깅과 최적화

 - Spark streaming 소개

 - Structured Streaming API

 - Spark streaming과 Kafka의 활용 및 실습

 

Kafka 강의를 듣고난 뒤 후기

데이터 스트리밍 강의 중 Kafka강의를 모두 들었습니다. Kafka 강의는 총 43개 강의로 나뉘어져 있으며 kafka에 대한 개략적인 설명, consumer, producer, rebalance, topic, offset 등 기본적인 단어부터 어떻게 사용되는지 영상을 통해 알려줍니다. Kafka의 설치 및 실행과 같은 운영노하우보다는 좀더 kafka에 대한 기본 개념에 대한 추상화된 설명에 초점이 맞추어져 있습니다.

 

강의에서는 kafka의 핵심인 topic의 retention date에 대한 설명이나 consumer의 polling동작과 같이 타 AMQP와 다른점에 대해 특히 강조하면서 설명합니다. 상기와 같은 설명은 실습과 함께 진행되는데, 따로 컴퓨터에서 kafka에 대한 설치나 운영없이 온라인으로 kafka를 즉시 실행시키고 code를 테스트할 수 있다는 점은 매우 새로웠고 편리했습니다. 

 

웹에서 실행가능한 python code, linux with kafka

 

다만, 코드에 대한 내용을 적게 설명하고 kafka 개념에 대한 설명에 치중하기 위해 Java로 구성된 Kafka-client가 아니라 Confluent의 python-kafka module(github)를 포함한 python code로 설명하고 있습니다. 좀 더 추상화된 level로 설명하기 위해 python code로 실습과 예제를 진행하였던것 같습니다. 

 

또한 43개 강의로 kafka를 설명하려다 보니 내용이 잘못됬거나 빠진부분도 일부 있었습니다.

 

GroupId는 consumer들에게 반드시 필요하다.

상기 Question은 31번째 강의에서 나오는 질문입니다.

 

consumer들은 데이터를 병렬로 처리하기 위해 묶음으로 사용되기 위해 Group ID가 사용되기도 하지만 비즈니스 요구사항에 따라 만약 assign() method를 사용하여 topic의 일부 partition에서 입수할 때는 Group ID는 사용되지 않기도 합니다. 그렇기 때문에 상기 Question은 질문을 좀더 명확하게 하거나 혹은 답은 false가 되어야 한다고 생각됩니다.

☞ assign() method는 topic의 partition을 직접 선언하여 입수하지만 여전히 Group ID를 사용하고, Group ID를 선언해야 합니다. 왜냐하면 여전히 오프셋을 커밋해야하며 다른 컨슈머와의 commit 충돌을 방지하기 위함입니다.

 

그렇기 때문에 답은 True가 맞습니다.

public void assign(java.util.Collection partitions)
Manually assign a list of partitions to this consumer. This interface does not allow for incremental assignment and will replace the previous assignment (if there is one). Manual topic assignment through this method does not use the consumer's group management functionality.

 

그리고 Consumer의 auto.commit, 수동 commit, comimt retry 내용 등 일부 부분에 대해 설명이 부실하게 되어 있어 매우 아쉬웠습니다. 또한 offset에 대한 설명에서 영상의 그림이 일부 잘못되어 있다는 점도 아쉬웠습니다.

 

총평

저는 이미 kafka에 대한 기본적인 내용을 알고 있었기 때문에 일부 틀리거나 빠진부분에 대해 재학습할 수 있었습니다. 그러나 kafka를 처음접하는 분에게는 이 강의는 적합하지 않을 수 있습니다. 특히 이 강의를 통해 kafka에 대한 모든 내용을 알고 싶거나 kafka를 실전에서 운영하고 싶다면 이 강의로는 턱없이 부족하다고 말씀드릴 수 있습니다. 다만 kafka에 대한 기본 개념에 대해 전반적으로 알아나간다는 목적이라면 이 강의를 듣는것이 부합할것 같습니다. 

 

만약 kafka에 대한 기본 개념이 없는 상태에서 들으신다면 한번 듣고나서 다시 apache kafka 공식 홈페이지(url)의 Getting started를 토대로 재학습을 반드시 진행하시는 것을 추천드립니다. 이 강의에 대한 궁금한점이나 추가적으로 알고싶은점은 아래 댓글로 남겨주시면 답변달아드리겠습니다.