<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>_dapeng.log</title>
        <link>https://velog.io/</link>
        <description>The data speaks for itself</description>
        <lastBuildDate>Mon, 03 Oct 2022 14:15:24 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>_dapeng.log</title>
            <url>https://velog.velcdn.com/images/_dapeng/profile/b240947e-3a2b-489f-b410-e5b2061241ba/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. _dapeng.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/_dapeng" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Apache-Flink 시작하기]]></title>
            <link>https://velog.io/@_dapeng/Apache-Flink-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@_dapeng/Apache-Flink-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0</guid>
            <pubDate>Mon, 03 Oct 2022 14:15:24 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>Apache-Flink 입문 입니다. 간단하게 환경 세팅 후, Flink 예제 하나 정도 살펴봤습니다. 
Flink의 공식 문서와 패스트캠퍼스 강의 참고했습니다. 
<a href="https://nightlies.apache.org/flink/flink-docs-release-1.15/docs/learn-flink/overview/">https://nightlies.apache.org/flink/flink-docs-release-1.15/docs/learn-flink/overview/</a></p>
</blockquote>
<h2 id="flink-소개">Flink 소개</h2>
<hr>
<p><strong>Flink</strong> 는 <strong>오픈소스 스트림 프로세싱 프레임워크</strong> 이다. 스트림 프로세싱이라 하면, 말 그대로 <strong>&#39;흐르는&#39; 데이터</strong>를 처리하는 프레임워크인데, 지속적으로 들어오는 데이터, 즉 실시간으로 계속해서 들어오는 데이터를 처리하는 프레임워크이다. (실시간이 주 목적인데, 배치 프로세싱도 가능하다.)</p>
<p>Flink의 주요한 특징(장점)은 세 가지 정도 있다. </p>
<ul>
<li>⭐️ Fault-tolerance → 시스템 장애 시, 장애 직전으로 돌아가서 다시 시작 가능 (checkpoint 설정으로) </li>
<li>⭐️ Rescalability → 실행 도중에 리소스 추가 가능</li>
<li>⭐️ Exactly-once → 데이터가 한 번 실행된다는 것을 보장 </li>
</ul>
<p>Flink 는 실시간 데이터를 &#39;처리&#39; 하는 프레임워크이기 때문에, 데이터를 어디를 통해서 어떻게 받아오고, 처리한 데이터를 어디로 어떻게 보내겠다 등등의 &#39;처리&#39; 외의 부수적인 상황에 대해서는 통제하거나, 관여하지 않는다. 
즉, *<em>실시간 데이터를 처리하는 Pipeline 에만 온전히 집중할 수 있도록 해준다. *</em></p>
<h2 id="flink-datastream-flow">Flink DataStream Flow</h2>
<hr>
<p><img src="https://velog.velcdn.com/images/_dapeng/post/15f1bb29-97eb-44a6-8dd7-922f5352e0bf/image.png" alt="Flink의 Streaming Dataflow"></p>
<p><img src="https://velog.velcdn.com/images/_dapeng/post/38726b0f-aad8-4893-8e1c-a411e81b6b7f/image.png" alt="Flink의 Streaming Dataflow 도식화"></p>
<p>그림 두 장이면 끝이다. Flink는 3개 Step의 매우 단순한 DataStream Flow를 갖는다. </p>
<ol>
<li>Source<ul>
<li>데이터를 어디서 가져올 것인가? 데이터 출처 </li>
</ul>
</li>
<li>Transformation <ul>
<li>데이터를 어떻게 처리할 것인가? -&gt; 여기에 데이터를 처리하는 주요 로직이 담기게 된다. </li>
</ul>
</li>
<li>Sink <ul>
<li>처리한 데이터를 어디로 보낼 것인가? 처리 완료된 데이터 저장소 </li>
</ul>
</li>
</ol>
<p>(Fault-tolerance 에 대한 부분은 추후 Toy 프로젝트를 통해 알아보고자 한다.) </p>
<h2 id="apache-flink-환경-세팅">Apache-Flink 환경 세팅</h2>
<hr>
<p>세팅 전, JobManager와 TaskManager를 사용하게 되는데, 
<img src="https://velog.velcdn.com/images/_dapeng/post/92f61e23-c9fe-43b8-8a77-7311ce0fa8e2/image.png" alt=""></p>
<p>Flink는 기본적으로 parallel and distributed 하다. 이를 담당하는 애들이 JobManager와 TaskManager인데, TaskManager는 말 그대로 어떤 task slot 에서 task를 수행하는 역할을 하고, JobManager가 TaskManager에게 task들을 분배하는 역할을 한다. </p>
<p>docker 가 설치되어 있는 환경에서, (필자는 인텔맥북을 쓰고 있다.) </p>
<pre><code>$ FLINK_PROPERTIES=&quot;jobmanager.rpc.address: jobmanager&quot;
$ docker network create flink-network

$ docker run \
    --rm \
    --name=jobmanager \
    --network flink-network \
    --publish 8081:8081 \
    --env FLINK_PROPERTIES=&quot;${FLINK_PROPERTIES}&quot; \
    flink:latest jobmanager</code></pre><p>JobManager 를 launch 했다. </p>
<pre><code>$ docker run \
    --rm \
    --name=taskmanager \
    --network flink-network \
    --env FLINK_PROPERTIES=&quot;${FLINK_PROPERTIES}&quot; \
    flink:latest taskmanager</code></pre><p>다음으로 TaskManager 를 launch 했다. 
<img src="https://velog.velcdn.com/images/_dapeng/post/bc50623d-c66b-48d1-8b7b-755c2e748420/image.png" alt=""></p>
<p>이렇게 로컬에서 기본적으로 Task Manager 1개를 가진 Flink 대시보드를 launch 할 수 있다. </p>
]]></description>
        </item>
    </channel>
</rss>