searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

分布式机器学习系统-数据同步模块技术方案-Apache Kafka

2023-07-04 01:36:24
9
0

Kafka简介

Kafka是一种分布式的、基于发布/订阅的消息系统,可以用于构建高性能、可扩展的实时数据流应用程序。主要设计目标如下:

(1)以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。
(2)高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。
(3)支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。
(4)同时支持离线数据处理和实时数据处理。
(5)Scale out:支持在线水平扩展。

Kafka架构

1、关键术语

1)Producer :消息生产者,就是向kafka broker发消息的客户端;

2)Consumer :消息消费者,向kafka broker取消息的客户端;

3)Topic :可以理解为一个队列,一个topic里保存的是同一类消息,相当于对消息的分类,每个producer将消息发送到kafka中,都需要指明要存的topic是哪个,也就是指明这个消息属于哪一类;

4) Consumer Group (CG):这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多个CG。topic的消息会复制(不是真的复制,是概念上的)到所有的CG,但每个partion只会把消息发给该CG中的一个consumer。如果需要实现广播,只要每个consumer有一个独立的CG就可以了。要实现单播只要所有的consumer在同一个CG。用CG还可以将consumer进行自由的分组而不需要多次发送消息到不同的topic;

5)Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic;

6)Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序;

7)Offset:kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafka。

2、工作流程

1)数据生产过程(Produce)

  对于生产者要写入的一条记录,可以指定四个参数:分别是topic、partition、key和value,其中topic和value(要写入的数据)是必须要指定的,而key和partition是可选的。

  对于一条记录,先对其进行序列化,然后按照 Topic 和 Partition,放进对应的发送队列中。如果 Partition 没填,那么情况会是这样的:a、**Key 有填。**按照 Key 进行哈希,相同 Key 去一个 Partition。b、**Key 没填。**Round-Robin 来选 Partition。

producer将会和Topic下所有partition leader保持socket连接,消息由producer直接通过socket发送到broker。其中partition leader的位置(host:port)注册在zookeeper中,producer作为zookeeper client,已经注册了watch用来监听partition leader的变更事件,因此,可以准确的知道谁是当前的leader。

  producer端采用异步发送:将多条消息暂且在客户端buffer起来,并将他们批量的发送到broker,小数据IO太多,会拖慢整体的网络延迟,批量延迟发送事实上提升了网络效率。

(2)数据消费过程(Consume)

  对于消费者,不是以单独的形式存在的,每一个消费者属于一个consumer group,一个group包含多个consumer。特别需要注意的是:订阅Topic是以一个消费组来订阅的,发送到Topic的消息,只会被订阅此Topic的每个group中的一个consumer消费

  如果所有的Consumer都具有相同的group,那么就像是一个点对点的消息系统;如果每个consumer都具有不同的group,那么消息会广播给所有的消费者。

  具体说来,这实际上市根据partition来分的,一个 Partition,只能被消费组里的一个消费者消费,但是可以同时被多个消费组消费,消费组里的每个消费者是关联到一个partition的,因此有这样的说法:对于一个topic,同一个group中不能有多于partitions个数的consumer同时消费,否则将意味着某些consumer将无法得到消息。

  同一个消费组的两个消费者不会同时消费一个partition。

       在kafka中,采用了pull方式,即consumer在和broker建立连接之后,主动去pull(或者说fetch)消息,首先consumer端可以根据自己的消费能力适时的去fetch消息并处理,且可以控制消息消费的进度(offset)。

  partition中的消息只有一个consumer在消费,且不存在消息状态的控制,也没有复杂的消息确认机制,可见kafka broker端是相当轻量级的。当消息被consumer接收之后,需要保存 Offset 记录消费到哪,以前保存在 ZK 中,由于 ZK 的写性能不好,以前的解决方法都是 Consumer 每隔一分钟上报一次,在 0.10 版本后,Kafka 把这个 Offset 的保存,从 ZK 中剥离,保存在一个名叫 consumeroffsets topic 的 Topic 中,由此可见,consumer客户端也很轻量级。

分布式机器学习系统数据同步模块技术方案

       在分布式机器学习系统中,数据同步模块的一个重要方面是确保各个节点上的模型参数能够进行更新和同步。以下是一种技术方案,使用Apache Kafka实现分布式机器学习系统中的数据同步和节点参数更新:

1、创建Kafka主题:在Kafka中,主题(topic)是消息的分类标识。为了实现数据同步,可以创建一个专门用于参数更新的主题。可以使用Kafka提供的命令行工具或编程接口来创建主题。

2、参数服务器架构:采用参数服务器架构,选择一个或多个节点作为参数服务器节点。这些节点将负责存储和管理模型的参数,并处理来自训练节点的参数更新请求。可以在这些节点上运行一个Kafka消费者,从参数更新主题中读取消息,并处理参数更新请求。

3、训练节点:在分布式机器学习系统中的每个训练节点上,需要运行一个Kafka生产者。训练节点负责处理训练数据,并在本地计算梯度和模型参数更新。每个训练节点都可以独立地在本地更新模型的参数,一旦参数更新计算完成,训练节点将参数更新请求发送到参数更新主题。

4、参数更新:训练节点通过网络将参数更新请求发送给参数服务器节点。参数服务器节点上的Kafka消费者会从参数更新主题中读取参数更新请求后,根据一定的策略(如梯度累积、参数平均等)对这些更新进行聚合,并计算出新的参数值。

5、数据同步:一旦参数服务器节点计算出新的参数值,它将这些参数值同步到所有训练节点。可以使用Kafka的消息队列特性来实现参数的异步传输。参数服务器节点可以将新的参数值发送到一个专门用于参数同步的主题中。

6、训练节点参数更新:训练节点上的Kafka消费者会从参数同步主题中读取新的参数值。一旦训练节点接收到新的参数值,它们可以将这些参数值应用于本地模型,并继续进行后续的训练。为了确保数据同步的一致性和效率,可以使用异步参数更新策略,其中训练节点和参数服务器节点之间的通信是异步的,训练节点可以继续处理其他任务而不必等待参数更新的完成。

7、容错性和一致性:为了确保系统的容错性和一致性,可以采用一些技术机制,如冗余备份和数据一致性协议。这样可以防止节点故障或网络问题导致数据同步的失败或不一致。

       通过使用以上技术方案,数据同步模块能够确保分布式机器学习系统中各个节点的模型参数得到及时更新和同步,从而提高系统的性能和效果。

0条评论
0 / 1000
杨****芳
2文章数
0粉丝数
杨****芳
2 文章 | 0 粉丝
杨****芳
2文章数
0粉丝数
杨****芳
2 文章 | 0 粉丝
原创

分布式机器学习系统-数据同步模块技术方案-Apache Kafka

2023-07-04 01:36:24
9
0

Kafka简介

Kafka是一种分布式的、基于发布/订阅的消息系统,可以用于构建高性能、可扩展的实时数据流应用程序。主要设计目标如下:

(1)以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。
(2)高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。
(3)支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。
(4)同时支持离线数据处理和实时数据处理。
(5)Scale out:支持在线水平扩展。

Kafka架构

1、关键术语

1)Producer :消息生产者,就是向kafka broker发消息的客户端;

2)Consumer :消息消费者,向kafka broker取消息的客户端;

3)Topic :可以理解为一个队列,一个topic里保存的是同一类消息,相当于对消息的分类,每个producer将消息发送到kafka中,都需要指明要存的topic是哪个,也就是指明这个消息属于哪一类;

4) Consumer Group (CG):这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多个CG。topic的消息会复制(不是真的复制,是概念上的)到所有的CG,但每个partion只会把消息发给该CG中的一个consumer。如果需要实现广播,只要每个consumer有一个独立的CG就可以了。要实现单播只要所有的consumer在同一个CG。用CG还可以将consumer进行自由的分组而不需要多次发送消息到不同的topic;

5)Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic;

6)Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序;

7)Offset:kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafka。

2、工作流程

1)数据生产过程(Produce)

  对于生产者要写入的一条记录,可以指定四个参数:分别是topic、partition、key和value,其中topic和value(要写入的数据)是必须要指定的,而key和partition是可选的。

  对于一条记录,先对其进行序列化,然后按照 Topic 和 Partition,放进对应的发送队列中。如果 Partition 没填,那么情况会是这样的:a、**Key 有填。**按照 Key 进行哈希,相同 Key 去一个 Partition。b、**Key 没填。**Round-Robin 来选 Partition。

producer将会和Topic下所有partition leader保持socket连接,消息由producer直接通过socket发送到broker。其中partition leader的位置(host:port)注册在zookeeper中,producer作为zookeeper client,已经注册了watch用来监听partition leader的变更事件,因此,可以准确的知道谁是当前的leader。

  producer端采用异步发送:将多条消息暂且在客户端buffer起来,并将他们批量的发送到broker,小数据IO太多,会拖慢整体的网络延迟,批量延迟发送事实上提升了网络效率。

(2)数据消费过程(Consume)

  对于消费者,不是以单独的形式存在的,每一个消费者属于一个consumer group,一个group包含多个consumer。特别需要注意的是:订阅Topic是以一个消费组来订阅的,发送到Topic的消息,只会被订阅此Topic的每个group中的一个consumer消费

  如果所有的Consumer都具有相同的group,那么就像是一个点对点的消息系统;如果每个consumer都具有不同的group,那么消息会广播给所有的消费者。

  具体说来,这实际上市根据partition来分的,一个 Partition,只能被消费组里的一个消费者消费,但是可以同时被多个消费组消费,消费组里的每个消费者是关联到一个partition的,因此有这样的说法:对于一个topic,同一个group中不能有多于partitions个数的consumer同时消费,否则将意味着某些consumer将无法得到消息。

  同一个消费组的两个消费者不会同时消费一个partition。

       在kafka中,采用了pull方式,即consumer在和broker建立连接之后,主动去pull(或者说fetch)消息,首先consumer端可以根据自己的消费能力适时的去fetch消息并处理,且可以控制消息消费的进度(offset)。

  partition中的消息只有一个consumer在消费,且不存在消息状态的控制,也没有复杂的消息确认机制,可见kafka broker端是相当轻量级的。当消息被consumer接收之后,需要保存 Offset 记录消费到哪,以前保存在 ZK 中,由于 ZK 的写性能不好,以前的解决方法都是 Consumer 每隔一分钟上报一次,在 0.10 版本后,Kafka 把这个 Offset 的保存,从 ZK 中剥离,保存在一个名叫 consumeroffsets topic 的 Topic 中,由此可见,consumer客户端也很轻量级。

分布式机器学习系统数据同步模块技术方案

       在分布式机器学习系统中,数据同步模块的一个重要方面是确保各个节点上的模型参数能够进行更新和同步。以下是一种技术方案,使用Apache Kafka实现分布式机器学习系统中的数据同步和节点参数更新:

1、创建Kafka主题:在Kafka中,主题(topic)是消息的分类标识。为了实现数据同步,可以创建一个专门用于参数更新的主题。可以使用Kafka提供的命令行工具或编程接口来创建主题。

2、参数服务器架构:采用参数服务器架构,选择一个或多个节点作为参数服务器节点。这些节点将负责存储和管理模型的参数,并处理来自训练节点的参数更新请求。可以在这些节点上运行一个Kafka消费者,从参数更新主题中读取消息,并处理参数更新请求。

3、训练节点:在分布式机器学习系统中的每个训练节点上,需要运行一个Kafka生产者。训练节点负责处理训练数据,并在本地计算梯度和模型参数更新。每个训练节点都可以独立地在本地更新模型的参数,一旦参数更新计算完成,训练节点将参数更新请求发送到参数更新主题。

4、参数更新:训练节点通过网络将参数更新请求发送给参数服务器节点。参数服务器节点上的Kafka消费者会从参数更新主题中读取参数更新请求后,根据一定的策略(如梯度累积、参数平均等)对这些更新进行聚合,并计算出新的参数值。

5、数据同步:一旦参数服务器节点计算出新的参数值,它将这些参数值同步到所有训练节点。可以使用Kafka的消息队列特性来实现参数的异步传输。参数服务器节点可以将新的参数值发送到一个专门用于参数同步的主题中。

6、训练节点参数更新:训练节点上的Kafka消费者会从参数同步主题中读取新的参数值。一旦训练节点接收到新的参数值,它们可以将这些参数值应用于本地模型,并继续进行后续的训练。为了确保数据同步的一致性和效率,可以使用异步参数更新策略,其中训练节点和参数服务器节点之间的通信是异步的,训练节点可以继续处理其他任务而不必等待参数更新的完成。

7、容错性和一致性:为了确保系统的容错性和一致性,可以采用一些技术机制,如冗余备份和数据一致性协议。这样可以防止节点故障或网络问题导致数据同步的失败或不一致。

       通过使用以上技术方案,数据同步模块能够确保分布式机器学习系统中各个节点的模型参数得到及时更新和同步,从而提高系统的性能和效果。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0