Faust 入门

Faust网上的资料台少了。就萌生了自己看完文档记录下来的想法。

       最简单的入门-消费一个topic的例子网上还是很容易找到的,这里就不讲那个例子了。

直接讲一些自己的理解。

一、程序入口

app对象:

注意app对象必须命名为app,否则识别不了(当然也可修改,需要用命令,后面会讲到)。

全部的程序入口,从这个app对象开始,它包含了我们会用到的所有方法。app是线程安全的。

app = faust.App(
     'myid',
     broker='kafka://kafka.example.com',
     store='rocksdb://'
)

构造方法里,前两个参数是必须的,app名字(也是对应消费者组的名字)和kafka地址。第三个参数在生产环境建议配置,是配置如何将分布式表本地化存储,开发环境可以不配置,默认是内存,官方文档给的是一个数据库。还有其他参数的详细配置在文档里有链接可以查找。

二、Actions

(一)app.topic()--创建一个topic的描述

         用来告诉流处理器去消费哪个topic的数据、数据的key和value的序列化方式(默认是bytes)、重分区数等,必须的参数是topic名字,其他的是可选。

topic = app.topic('your_kafka_topic')

@app.agent(topic)
async def process(stream):
    async for event in stream:
        ...

Topic的参数解释

1、key_type/value_typeModelArg好理解:

class MyValueModel(faust.Record):
    name: str
    value: float

topic = app.topic(
    'name_of_topic',
    key_type=bytes,
    value_type=MyValueModel,
)

2.key_serializer/value_serializerCodecArg

迷了:怎么有两个序列化方式描述?有知道的大佬可以告诉下不

3.partitionsint

分区数(不能确定是针对生产者来说还是消费者来说)

         作为生产者的话需要自己指定了。作为消费者的话,像spark streaming一样,除非上游分区特别小,数据量又特别大,否则不要重分区,因为重分区额外开销较大。

          需要到后面看到用的地方后再判断这里说的是对消费者还是生产者。

4.retentionSeconds

消息被从服务器中移除前可以在topic中保留的时间。

(这是作为生产者说的)

5.compactingbool

是否是压缩主题标志,默认否。

如果设置为真,表示该topic需要压缩,仅保留一个key对应的最新value,其他都被压缩起来。(不明白压缩主题的意思)

6.acksbool

使能对该主题的自动确认。默认是真,如果设置为否,需要手动确认每个事件。

7.internalbool

默认否,如果设置为真,意味着我们有权利和义务去修改和删除这个topic 

8.maxsizeint

这个通道的缓冲区最大size,默认取自stream_buffer_maxsize 设置,超出缓冲区容量时,worker只能停下来等待agent/消费者来赶上来。如果总是满,会有负面影响。

当调大这个参数时,要同时配合broker_commit_interval参数,使消费者提交频繁一些。

(二)app.channel() – 创建一个本地通道

创建一个基于内存的通信通道

现在还是不能理解这个通道是干什么的,想想是本地内部传数据的?类似flume么?

(这些问题解答后得在这里补上)

(三)app.Table() --定义一个表

一开始以为是像数据库一样的一个表,后来发现就是一个键值对,类似java的hashtable-->hashmap。一个用法是可以用来存放各个线程共享的计数变量。

创建table唯一需要的参数就是一个可识别的唯一命名。

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值