본문 바로가기

개발이야기

Udacity 데이터 스트리밍 강의정리 - Faust python module 소개

# Python Streams ٩(◕‿◕)۶
# Forever scalable event processing & in-memory durable K/V store;
# w/ asyncio & static typing.
import faust

 

Faust는 python의 stream processing library이다. kafka stream의 python버젼이라고 볼수 있습니다. Faust는 stream processing과 event processing 둘다 지원합니다. DSL언어를 사용하지 않고 pytthon library로서 동작합니다. 그렇기 때문에 Flask, NumPy, PyTorch 등과 함께 사용 할 수 있습니다.

 

- Faust url : https://faust.readthedocs.io/en/latest/

 

Faust는 python 3.6이상의 버젼에서 정상동작합니다.

 

아래는 Faust의 sample code입니다.

app = faust.App('myapp', broker='kafka://localhost')

# Models describe how messages are serialized:
# {"account_id": "3fae-...", amount": 3}
class Order(faust.Record):
    account_id: str
    amount: int

@app.agent(value_type=Order)
async def order(orders):
    async for order in orders:
        # process infinite stream of orders.
        print(f'Order for {order.account_id}: {order.amount}')

Kafka의 topic으로부터 데이터를 가져와서 스트리밍 처리를 할 수 있게 되어 있습니다. async def function을 통해 web request마냥 비동기적으로 method를 동작하게 할 수 있습니다.

 

위 시스템은 database인것 처럼 동작합니다. Table은 key/value를 저장하며 python dictionary type의 동작과 유사하다고 볼 수 있습니다. 이는 RocksDB라고 하는 C++ 코드로 구성된 embedded database로 사용됩니다. 이 DB는 각 machine위에서 돌아가며 매우 빠릅니다.

 

Kafka stream의 동작처럼 이 Table의 동작을 통해 window 동작을 구현할 수도 있습니다. Tumbling, Hopping, Sliding window를 모두 지원합니다.