为什么数据科学家会在一个笔记本中一起使用Kafka Jupyter Python KSQL TensorFlow ?
使用Python及其机器学习工具堆栈和可扩展的可靠数据平台进行的模型开发之间存在阻抗不匹配的情况 。 前者是您快速,轻松进行原型制作以构建分析模型所需要的。 后者是您需要用于大规模数据摄取,预处理,模型部署和监视的功能。 它要求低延迟,高吞吐量,零数据丢失和24/7可用性要求。
这是我在该领域看到的主要原因,这些原因使公司难以将分析模型投入生产以增加业务价值 。 实际上,对于大规模,高性能,可靠的环境,Python并不是最知名的技术。 但是,它是数据科学家的绝佳工具,也是Apache Kafka等数据平台的杰出客户。
因此,我创建了一个项目来演示如何解决此阻抗不匹配问题。 关于此主题的更详细的博客文章即将在Confluent Blog上发布 。 在此博客中,我想讨论并分享我的Github项目:
“ 使用Python,Jupyter Notebook,TensorFlow,Keras,Apache Kafka和KSQL使机器学习变得简单且可扩展 ”。 该项目包括完整的Jupyter演示,该演示结合了以下内容:
- 数据科学工具 (Python,Jupyter笔记本,NumPy,Pandas)的简单性
- 强大的机器学习/深度学习框架(TensorFlow,Keras)
- 可靠,可扩展的基于事件的流技术,用于生产部署(Apache Kafka,Kafka Connect,KSQL)。
如果您想了解有关Apache Kafka开源生态系统和机器学习之间的关系的更多信息,请查看以下两个博客文章:
- 如何使用Apache Kafka在生产中构建和部署可伸缩机器学习
- 使用Apache Kafka推动尖端机器学习
让我们快速描述这些组件,然后在Jupyter笔记本电脑中查看它们的组合。
Python,Jupyter Notebook,机器学习/深度学习
Jupyter的存在是为了开发跨多种编程语言进行交互式计算的开源软件,开放标准和服务 。 因此,它是使用Python和机器学习/深度学习框架(如TensorFlow)构建分析模型的绝佳工具。
结合使用Jupyter笔记本(或类似的工具,例如Google的Colab或Hortonworks的Zeppelin )以及Python和您喜欢的ML框架(TensorFlow,PyTorch,MXNet,H2O,“ you-name-it”),是进行原型设计和制作的最佳,最简便的方法建筑演示。
但是,与使用可扩展,可靠且高性能的机器学习基础结构相比,使用Python在Jupyter笔记本中构建原型甚至复杂的分析模型是一个不同的挑战。 我总是在讨论中参考伟大的论文《机器学习系统中的隐藏技术债务》 :
考虑一下您无法大规模生产的用例。 例如,具有数百万用户的互联汽车基础设施,支付和欺诈检测系统或全球Web应用程序。 这就是Apache Kafka生态系统发挥作用的地方。
Apache Kafka和KSQL
Apache Kafka是由Linkedin开发并捐赠给Apache Software Foundation的开源流处理软件平台 。 它是用Scala和Java编写的。 该项目旨在提供一个统一的,高吞吐量,低延迟的流媒体平台,用于处理和处理实时数据馈送。
Confluent KSQL是一种流SQL引擎,可对Apache Kafka进行实时数据处理 。 它提供了一个易于使用但功能强大的交互式SQL界面,用于在Kafka上进行流处理; 无需使用Java或Python之类的编程语言编写代码。 KSQL具有可伸缩性,弹性,容错能力。 它支持各种流操作,例如数据过滤,转换,聚合,联接,窗口和会话化。
如果您想了解有关KSQL的更多信息,请查看我在马德里大数据西班牙2018上的演讲中的这些幻灯片和视频记录。
Kafka + Jupyter + Python解决机器学习中隐藏的技术部门
为了解决机器学习基础架构中隐藏的技术部门,您可以结合使用ML相关工具和Apache Kafka生态系统的优势:
- Python工具堆栈,例如Jupyter,Pandas或scikit-learn
- TensorFlow,H2O或DeepLearning4j等机器学习框架
- Apache Kafka生态系统,包括用于集成的Kafka Connect和用于实时流处理和模型推断的Kafka Streams或KSQL之类的组件
下图描述了这种架构的示例:
如果您想更好地了解Apache Kafka生态系统和机器学习/深度学习之间的关系,请查看以下材料:
- 博客文章: 如何使用Apache Kafka在生产中构建和部署可伸缩机器学习
- 幻灯片: Apache Kafka +机器学习=>智能实时应用程序
- 幻灯片: 使用Apache Kafka开源生态系统以极大规模进行深度学习(在云中)
- 视频录制: 使用开源框架在关键任务和可扩展的实时应用程序中进行深度学习
- 博客文章: 使用Apache Kafka推动尖端的机器学习–混合ML架构,AutoML等…
示例:Kafka + Jupyter + Python + KSQL + TensorFlow
现在,让我们看一个结合了所有这些技术(例如Python,Jupyter,Kafka,KSQL和TensorFlow)的示例,以构建可扩展但易于使用的机器学习环境。
这个Jupyter笔记本并不意味着可以完美地使用所有编码和ML最佳实践,而只是一个简单的指南,说明如何构建自己的笔记本,可以在其中结合使用Python API与Kafka和KSQL。
用例:信用卡付款欺诈检测
我们使用来自Kaggle 的信用卡付款测试数据集作为基础来训练无监督的自动编码器,以检测异常情况和潜在的付款欺诈行为。
该项目的重点不仅在于模型训练,还包括整个机器学习基础架构,包括数据提取,数据预处理,模型训练,模型部署和监视。 所有这些都需要可伸缩,可靠和高性能。
从Jupyter Notebook利用Python + KSQL + Keras / TensorFlow
笔记本将指导您完成以下步骤:
- 与来自Kafka流的事件集成,
- 使用KSQL预处理数据(转换,聚合,过滤等)
- 使用Python库准备用于模型训练的数据,即使用Numpy,Pandas和scikit-learn预处理数据
- 使用Python API使用Keras和TensorFlow训练分析模型
- 使用Python API使用Keras和TensorFlow的分析模型预测数据
- 利用Kafka Streams或KSQL将分析模型部署到可扩展的Kafka环境(不是Jupyter笔记本的一部分,但共享演示链接)
这是Jupyter笔记本的屏幕截图,其中使用ksql-python API
- 连接到KSQL服务器
- 基于Kafka主题创建第一个KSQL STREAM
- 首先执行SELECT查询
查看完整的Jupyter Notebook,以了解如何结合Kafka,KSQL,Numpy,Pandas,TensorFlow和Keras来集成和预处理数据,然后训练您的分析模型。
为什么数据科学家完全应该使用Kafka和KSQL?
是的,您还可以在Jupyter笔记本中使用Pandas,scikit-learn,TensorFlow转换和其他Python库。 请在合理的地方这样做! 这不是一个“或者……”问题。 为正确的问题选择正确的工具。
关键是Kafka集成和KSQL语句使您能够
- 使用他喜欢的数据科学家的现有环境(包括Python和Jupyter),并将其与Kafka和KSQL结合起来,以使用简单的Python Wrapper API执行KSQL查询来集成和连续处理实时流数据。
- 轻松连接到流数据,而不仅仅是历史数据(可能来自最后一天,一周或一个月,例如通过CSV文件输入)。
- 将来自Kafka的基于流事件的传感器数据流等不同概念与生成器或字典之类的Python编程概念合并,可将其用于Python数据工具或ML框架(如Numpy,Pandas或scikit-learn)
- 重用相同的逻辑进行集成,预处理和监视,并将其从Jupyter笔记本电脑移至大规模测试和生产系统。
查看完整的Jupyter笔记本,以查看结合了Python,Kafka,KSQL,Numpy,Pandas,TensorFlow和Keras的完整示例 。 我认为,这是一个很好的组合,对于数据科学家和软件工程师而言都是宝贵的。
我想得到您的反馈。 您认为这有任何价值吗? 还是在您的方案和用例中没有任何意义?
翻译自: https://www.javacodegeeks.com/2019/01/kafka-tensorflow-data-scientists-python.html