智能实时应用是任何行业的游戏规则。机器学习及其子课题,深入学习正在获得势头,因为机器学习允许计算机找到隐藏的见解而不被明确地编程到哪里。这种能力是分析非结构化数据,图像识别,语音识别和智能决策所必需的。与Java,.NET或Python的传统编程是一个重要的区别。
虽然机器学习背后的概念并不新鲜,但大数据集和处理能力的可用性使得每个企业都能够建立强大的分析模型。通过在企业应用程序和微服务中应用分析模型,任何行业都有大量用例来增加收入,降低成本或改善客户体验。最近apache的kafka也是正在热点,那么和机器学习结合在一起又是怎么样的呢?
如果是使用Kafka构建,那么就先看一下运行和监控分析模型的参考架构:
这种架构的本质在于它使用Kafka作为收集特征数据的各种数据源,模型合适的模型构建环境以及服务预测的生产应用程序之间的中介。
功能数据从托管它的各种应用程序和数据库中拉入Kafka。此数据用于构建模型。这个环境将根据团队的技能和首选工具集而有所不同。模型构建可以是数据仓库,像Spark或Hadoop这样的大型数据环境,也可以是运行python脚本的简单服务器。该模型可以发布,其中获得相同模型参数的生产应用程序可以将其应用于传入的示例(可能使用Kafka Streams帮助索引功能数据以便按需使用)。生产应用程序可以从卡夫卡接收数据作为管道,或者甚至是Kafka Streams应用程序本身。参见下图:
• 数据流水线简化
• 构建分析模块与维护模块脱钩
• 根据需要实时或批量使用
• 分析模型可以部署在性能,可扩展性和关键任务环境中
除了利用Kafka作为可扩展的分布式消息传递代理,还可以添加Kafka生态系统的可选开源组件,如Kafka Connect,Kafka Streams,Confluent REST Proxy,Confluent Schema Registry或KSQL,而不是依靠Kafka生产者和消费者蜜蜂。参见下图:
我也看了不少机器学习的项目,其中典型设置:
示范训练
数据通过卡夫卡摄入到Hadoop集群中。H2O.ai用于分析Hadoop中的历史数据,构建神经网络。数据科学家可以使用其首选的界面-R,Python,Scala,Web UI Notebook等。模型构建和验证在Hadoop集群上运行,处理休息时的数据。结果是由H2O.ai生成为Java代码的训练有素的分析模型。这已经准备好进行生产部署了。
模型推理
然后将神经网络部署到Kafka Streams应用程序。Kafka Streams应用程序可以在任何地方运行,无论是独立的Java进程,Docker容器还是Kubernetes集群。在这里,它实时应用于每个新事件进行预测。Kafka Streams利用Kafka集群提供分析模型和性能模型推理的可扩展的关键业务。
在线模特训练
我们不用分开模型训练和模型推理,也可以建立一个完整的在线模式培训基础设施。许多像Linkedin这样的科技巨头在过去利用Apache Kafka TM进行模型输入,培训,推理和输出。这种替代方案有几个取舍。大多数传统公司使用第一种方法,这适用于今天的大多数用例。
模型监控和警报
将分析模型部署到生产只是第一步。监控模型的准确性,分数,SLA和其他指标,以及实时提供自动报警同样重要。这些指标通过Kafka反馈给机器学习工具,以改进或替换模型。
以下显示了使用H2O构建分析模型的示例:一个开源机器学习框架,它利用其他框架,如Apache Spark或TensorFlow。数据科学家可以使用他或她最喜欢的编程语言,如R,Python或Scala。最大的好处是输出H2O引擎:Java代码。生成的代码通常执行得非常好,可以使用Kafka Streams轻松缩放。
以下是H2O.ai Flow(web UI /笔记本)和替代R代码的一些截图,以构建分析模型:
输出是一个生成为Java代码的分析模型。这可以在任务关键型生产环境中重新开发。因此,不必考虑如何将Python或R模型“迁移”到基于Java平台的生产系统。
虽然此示例使用H2O的功能来生成Java代码,但可以使用其他框架(如TensorFlow,Apache MXNet或DeepLearning4J)执行类似的操作。
其实重点在下面我要介绍的地方,也就是如何调用kafka的api。
分析模型的部署很容易与Kafka Streams。只需将模型添加到流处理应用程序中即可将其应用于新的事件: Apache Kafka的Streams API将H2O.ai模型嵌入到Kafka Streams中
由于Kafka Streams应用程序利用了所有Kafka功能,因此该新应用程序已准备好进行规模和关键任务使用。由于生产考虑,不需要调整模型。
可以在GitHub上找到正在运行的示例:https://github.com/kaiwaehner/kafka-streams-machine-learning-examples。简单地克隆项目,运行Maven构建,并了解在Kafka Streams应用程序中如何使用H2O模型。这个例子将继续发展,使用更为复杂的例子和用例来利用H2O和其他机器学习框架,如TensorFlow或DeepLearning4J在路线图中。这些都是是不错的框架。
将机器学习应用于流处理的这种实现可以使用您喜爱的CI / CD环境工具堆栈(如Maven,Gradle,Chef,Puppet或Jenkins)轻松集成到任何自动化的连续集成工作流程中。