Python Kinesis 消费者库 (KCL) 入门

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

我们正在与 Kinesis 赛跑。有了流媒体事件,我们需要让我们的数据科学家参与其中。一个问题是,KCL 和 KPL 非常关注 Java,但我们的数据科学家(以及我们组织的其他成员)喜欢 Python。 =)

我们使用 IPython notebook 来共享 python 代码/示例。因此,在这篇博客中,我将引导您使用 Python 和 IPython notebook 启动并运行,使用来自 Kinesis 的事件。如果您已经熟悉 IPython notebook,可以从这里拉取 notebook:

https://github.com/boneill42/kcl-python-notebook/

如果您不熟悉 iPython Notebook,请先转到 此处 快速了解一下。简而言之,IPython Notebook 是一个很棒的小型 Web 应用程序,可让您通过浏览器使用 Python 命令,创建可与他人共享的类似 wiki/gist 的“食谱”。一旦熟悉,请继续阅读。

要开始使用 KCL-python,让我们克隆 amazon-kinesis-client-python github 存储库:


 git clone git@github.com:awslabs/amazon-kinesis-client-python.git

然后,创建一个新的 virtualenv (如果你不使用 virtualenv,请使用该程序!):


 git clone git@github.com:awslabs/amazon-kinesis-client-python.git

接下来,获取 IPython Notebook 设置。通过从包含克隆的 repo 的目录运行以下命令来安装 ipython notebook:


 git clone git@github.com:awslabs/amazon-kinesis-client-python.git

这应该会在您的浏览器中打开一个新选项卡。单击“New->Python 2”启动一个新笔记本。笔记本包含一个或多个单元格。每个单元格都有一个类型。对于本练习,我们将使用“代码”单元格。我们将利用 IPython Notebook 中可用的“神奇”功能。我们将使用 run, 它将执行一个命令。具体来说,需要为 KCL 执行 python 设置。

amazon-kinesis-client-python 库实际上运行在 Java 进程之上,并使用 MultiLangDaemon 进行进程间通信。因此,要安装 KCL,您需要下载 jars。您可以通过在第一个单元格中输入并执行以下内容来在笔记本中执行此操作:


 git clone git@github.com:awslabs/amazon-kinesis-client-python.git

接下来,您需要安装这些罐子:


 git clone git@github.com:awslabs/amazon-kinesis-client-python.git

该命令为 python 安装了一些库(具体来说——它安装了 boto ,这是 python 的 aws 库)。因为笔记本不会动态重新加载,所以您需要重新启动 IPython Notebook 并重新打开笔记本。 (嗯...有没有办法重新加载笔记本电脑使用的 virtualenv w/o 重启?)

一旦重新加载,您就可以开始将事件发送到运动流中。现在,我们将使用 KCL 存储库中的示例应用程序。创建一个新单元并运行:


 git clone git@github.com:awslabs/amazon-kinesis-client-python.git

从这里,你应该看到:


 git clone git@github.com:awslabs/amazon-kinesis-client-python.git

呜呜!我们正在向 Kinesis 发送事件!现在,我们需要消费它们。 =)

为此,您需要编辑 sample.propertie 。此文件由 KCL 加载以配置消费者。最重要的是,查看该文件中的 executableName 属性。这设置了 KCL 在接收记录时将执行的 python 代码的名称。在示例中,这是 sample_kclpy_app.py。

看看那个示例 Python 代码。您会注意到需要实现四个重要方法: init process_records checkpoint shutdown 。这些方法的目的几乎是不言而喻的,但示例中的文档非常好。仔细阅读那里。

同样在 sample.properties 中,注意 AWSCredentialsProvider 。由于它在幕后使用 Java,因此您需要设置凭据提供程序的 Java 类名。如果保持不变,它将使用: DefaultAWSCredentialsProviderChain

值得查看该文档,但可能使身份验证工作的最简单途径是创建一个包含以下内容的 ~/.aws/credentials 文件:


 git clone git@github.com:awslabs/amazon-kinesis-client-python.git

设置凭据后,您可以通过在另一个笔记本单元中执行以下命令来启动消费者:


 git clone git@github.com:awslabs/amazon-kinesis-client-python.git

请注意, --java 参数需要 java 可执行文件的位置。现在,在笔记本中运行它会给你命令行,你可以继续执行它来使用流。继续将其剪切并粘贴到命令行中并执行它。此时你已经启动并运行了。

要开始使用您自己的应用程序,只需将 sample_kclpy_app.py 代码替换为您自己的代码,并更新属性文件,您就应该可以正常运行了。

现在,我觉得这有点矫揉造作。没有原生的 python 消费者(还没有!)。事实上,您实际上需要运行 *java*,它将返回并调用 python。老实说,通过这种方法,您从 Python 库中获得的东西不会比从 Java 库中获得的多。 (MultiLangDaemon 中的一些管道操作除外)当然,这是一种微服务方法......但也许简单地运行一个小的 python Web 服务(在负载平衡器后面?)会更好。然后,我们将能够更好地扩展消费者,而无需重新分片 Kinesis 流。 (一个分片/KCL 工作人员可以将工作分散到许多盒子中的许多 python 消费者)您需要小心检查点,但它可能更灵活一些。 (并且会完全将“数据科学”组件与 Kinesis 分离)绝对值得深思。 =)

与往常一样,如果您遇到麻烦,请告诉我。