Faust - 简洁高效的 Python 流处理库

开发 后端
在分布式系统和实时数据处理中,流处理是十分重要的技术。在数据密集型应用中,数据快速到达,转瞬即逝,需要及时进行处理,流式处理强调数据和事件的处理速度,对性能和可靠性有较高的要求。

在分布式系统和实时数据处理中,流处理是十分重要的技术。在数据密集型应用中,数据快速到达,转瞬即逝,需要及时进行处理,流式处理强调数据和事件的处理速度,对性能和可靠性有较高的要求。

流处理框架包括:Storm,Spark Streaming 和 Flink 等,而 Kafka 也不甘示弱,推出了分布式流处理平台 Kafka Streams。 Faust 把 Kafka Streams 带到了 Python,并实现了抽象和优化,为数据和事件的流处理提供了一个高效便利的框架。

简介

Faust,是 robinhood 在 Github 上开源的 Python 流处理库,目前版本为 1.10.4。

Faust 把 Kafka Streams 的概念带到了 Python,提供了包括流处理和事件处理的模式。Faust 使用纯 Python 实现,使得开发者可以使用包括 NumPy, PyTorch, Pandas 等的库进行数据处理。

Faust 实现简洁优雅,使用简单,性能优秀,且具有高可用、分布式、灵活性高的特点。目前 Faust 已被用于构建高性能分布式系统和实时数据管道中。

 

[[387836]]

Faust

 

使用

Faust 需求 Python 3.6 或以上,且需要可用的 Kafka >= 0.10 服务。使用 pip 安装:

  1. $ pip install -U faust 

此外,一些额外的特性需要额外的依赖,如 rocksdb,可以用来作为 Faust 在生产环境中的存储,以及 Redis,可以在开启缓存时使用。

 

[[387837]]

Faust

 

安装完成以后,就可以在项目中使用了。我们来看一个简单的例子:

 

  1. import faust 
  2.  
  3. app = faust.App( 
  4.     'hello-world'
  5.     broker='kafka://localhost:9092'
  6.     value_serializer='raw'
  7.  
  8. greetings_topic = app.topic('greetings'
  9.  
  10. @app.agent(greetings_topic) 
  11. async def greet(greetings): 
  12.     async for greeting in greetings: 
  13.         print(greeting) 

首先,我们使用 faust.App 创建一个 Faust 应用,并配置应用的名字、Kafka broker 和序列化方式。

然后,我们创建一个主题,这跟 Kafka 中的主题是对应的。

Faust 利用 Python 3.6+ 的异步语法 async,定义异步函数 greet,并注册为 Faust 应用的一个 agent。函数接收实时的数据集合 greetings,并异步地对每项数据进行输出。

把上述代码保存为 hello_world.py,并在命令行启动工作者:

  1. $ faust -A hello_world worker -l info 

该 Faust 工作者就会从 Kafka 中实时读取数据并处理。

我们可以发送一些数据来观察效果:

  1. $ faust -A hello_world send @greet "Hello Faust" 

上述命令发送了一条消息,执行后,我们就能在工作者的命令行中看到这条消息。

Faust 还充分利用了 Python 的类型提示,能够方便地定义数据模型:

 

  1. import faust 
  2.  
  3. class Greeting(faust.Record): 
  4.     from_name: str 
  5.     to_name: str 
  6.  
  7. app = faust.App('hello-app', broker='kafka://localhost'
  8. topic = app.topic('hello-topic', value_type=Greeting) 
  9.  
  10. @app.agent(topic) 
  11. async def hello(greetings): 
  12.     async for greeting in greetings: 
  13.         print(f'Hello from {greeting.from_name} to {greeting.to_name}'
  14.  
  15. @app.timer(interval=1.0) 
  16. async def example_sender(app): 
  17.     await hello.send( 
  18.         value=Greeting(from_name='Faust', to_name='you'), 
  19.     ) 
  20.  
  21. if __name__ == '__main__'
  22.     app.main() 

 

 

Faust

 

总结

Faust 把 Kafka Streams 带到了 Python 中,实现了简洁高效的数据流处理。其使用简单的装饰器和基于类型提示机的据模型,就能定义实现数据的处理逻辑;充分利用了 Python 的 async 异步机制,和其他高性能的异步库,实现了高效性能;其使用 Python 实现,使用开发者可以无缝对接其他数据处理和大数据相关功能。

责任编辑:未丽燕 来源: 今日头条
相关推荐

2019-06-27 10:32:57

Java开发代码

2024-12-19 09:05:13

Python链式调用

2021-01-19 13:10:29

ZshLinuxUbuntu

2018-06-06 09:10:34

编程语言Python库

2024-01-30 08:54:05

JavaScript技巧代码

2024-10-15 10:51:47

2023-11-30 16:05:17

2024-06-03 11:36:06

Pythonf-string

2022-07-25 11:33:48

Python大文件

2023-09-26 11:34:56

Python

2011-04-29 10:22:49

CSS高性能Web开发

2024-04-23 08:26:56

C++折叠表达式编程

2024-06-24 13:35:48

2012-01-09 17:03:39

台式机评测

2024-04-28 18:24:05

2019-07-31 10:24:16

JavaScript浏览器口袋妖怪

2023-10-29 12:54:16

Doris数据仓库

2022-09-17 18:23:46

Lodash模块化JavaScrip

2023-09-06 09:40:29

2010-03-24 15:19:35

Python库
点赞
收藏

51CTO技术栈公众号