騰訊 Angel PowerFL 聯(lián)邦學(xué)習(xí)平臺
聯(lián)邦學(xué)習(xí)作為新一代人工智能基礎(chǔ)技術(shù)砸脊,通過解決數(shù)據(jù)隱私與數(shù)據(jù)孤島問題笙以,重塑金融、醫(yī)療缩搅、城市安防等領(lǐng)域越败。
騰訊 Angel PowerFL 聯(lián)邦學(xué)習(xí)平臺構(gòu)建在 Angel 機器學(xué)習(xí)平臺上,利用 Angel--PS 支持萬億級模型訓(xùn)練的能力硼瓣,將很多在 Worker 上的計算提升到 PS(參數(shù)服務(wù)器) 端究飞;Angel PowerFL 為聯(lián)邦學(xué)習(xí)算法提供了計算、加密堂鲤、存儲噪猾、狀態(tài)同步等基本操作接口,通過流程調(diào)度模塊協(xié)調(diào)參與方任務(wù)執(zhí)行狀態(tài)筑累,而通信模塊完成了任務(wù)訓(xùn)練過程中所有數(shù)據(jù)的傳輸袱蜡。Angel PowerFL 聯(lián)邦學(xué)習(xí)已經(jīng)在騰訊金融云、騰訊廣告聯(lián)合建模等業(yè)務(wù)中開始落地慢宗,并取得初步的效果坪蚁。
Angel 機器學(xué)習(xí)平臺:https://github.com/Angel-ML
Angel PowerFL 對聯(lián)邦通信服務(wù)的要求
Angel PowerFL 聯(lián)邦學(xué)習(xí)平臺在訓(xùn)練任務(wù)過程當(dāng)中奔穿,對參與方之間的消息通信要求極高,要求消息系統(tǒng)必須穩(wěn)定可靠敏晤、保持高性能且能保證數(shù)據(jù)安全贱田。Angel PowerFL 的學(xué)習(xí)任務(wù)在訓(xùn)練過程當(dāng)中,參與方之間會有大量的加密數(shù)據(jù)通過通信模塊傳輸嘴脾,Angel PowerFL 對通信服務(wù)有以下需求:
?? 穩(wěn)定可靠
Angel PowerFL 的學(xué)習(xí)任務(wù)時長從幾分鐘到幾小時男摧,算法執(zhí)行對數(shù)據(jù)的準(zhǔn)確性要求很高,不同算法的數(shù)據(jù)傳輸峰值也不一樣译打,這需要通信模塊的服務(wù)足夠穩(wěn)定耗拓,并且不能丟數(shù)據(jù)。
?? 高性能傳輸
Angel PowerFL 底層通過 Spark 進(jìn)行計算奏司,Executor 并發(fā)執(zhí)行會產(chǎn)生很多待傳輸?shù)闹虚g數(shù)據(jù)乔询,通信模塊需要將這些加密后的數(shù)據(jù)及時傳輸給對方,這就要求通信服務(wù)做到低延時韵洋、高吞吐量竿刁。
?? 數(shù)據(jù)安全
雖然 Angel PowerFL 所有數(shù)據(jù)都通過加密模塊進(jìn)行了加密,但參與聯(lián)邦學(xué)習(xí)的業(yè)務(wù)可能分布在不同公司搪缨;跨公網(wǎng)進(jìn)行傳輸食拜,需要通信模塊足夠安全,不易被攻擊副编。
為什么選擇 Pulsar
聯(lián)邦通信服務(wù)在做技術(shù)預(yù)研的時候监婶,考慮過 RPC 直連、HDFS 同步齿桃、MQ 同步三種技術(shù)方案≈笈危考慮到對安全和性能的要求比較高短纵,排除了 RPC 直連和 HDFS 同步方案,確定采用 MQ 同步方案僵控。
MQ 可選的服務(wù)很多香到,比如 Pulsar、Kafka报破、RabbitMQ悠就、TubeMQ 等。考慮到 Angel PowerFL 對穩(wěn)定性充易、可靠性梗脾、高性能傳輸和數(shù)據(jù)安全有很高的需求,我們咨詢了騰訊數(shù)據(jù)平臺部 MQ 團隊盹靴,他們向我們推薦了 Pulsar炸茧。
隨后瑞妇,我們對 Pulsar 開展了深入調(diào)研,發(fā)現(xiàn) Pulsar 內(nèi)置的諸多特性梭冠,正好滿足了我們對消息系統(tǒng)的要求辕狰。Pulsar broker 和 bookie 采用了計算存儲分層架構(gòu),保證了數(shù)據(jù)穩(wěn)定可靠控漠,性能良好蔓倍;Pulsar 支持跨地域復(fù)制(geo--replication),解決了 PowerFL 跨聯(lián)邦同步 MQ 問題盐捷;而 Pulsar 的驗證和授權(quán)模式也能保證傳輸安全偶翅。
云原生的計算與存儲分層架構(gòu)
Apache Pulsar 是下一代云原生分布式消息和事件流平臺,采用了計算和存儲分層的架構(gòu):在 Broker 上進(jìn)行 Pub/Sub 相關(guān)的計算毙驯,在 Apache BookKeeper 上存儲數(shù)據(jù)倒堕。
和傳統(tǒng)的消息平臺(如 Kafka)相比,這種架構(gòu)有明顯的優(yōu)勢:
- Broker 和 bookie 相互獨立爆价,可以獨立擴展和容錯垦巴,提升系統(tǒng)的可用性。
- 分區(qū)存儲不受單個節(jié)點存儲容量的限制铭段,數(shù)據(jù)分布更均勻骤宣。
- BookKeeper 存儲安全可靠,保證消息不丟失序愚,同時支持批量刷盤以獲得更高吞吐量憔披。
image
Pulsar Geo--replication
Pulsar 原生支持跨地域復(fù)制(Geo--replication),可以在多個數(shù)據(jù)中心的多個 Pulsar 集群中同時同步/異步復(fù)制數(shù)據(jù)爸吮。還可以在消息級別芬膝,通過 setReplicationClusters 控制消息復(fù)制到哪些集群。
在上圖中形娇,無論 Producer P1锰霜、P2 和 P3 在什么時候分別將消息發(fā)布給 Cluster A、Cluster B 和 Cluster C 中的 topic T1桐早,這些消息均會立刻復(fù)制到整個集群癣缅。一旦完成復(fù)制,Consumer C1 和 C2 即可從自己所在的集群消費這些消息哄酝。
水平擴展
由于 Pulsar 的存儲設(shè)計基于分片友存,Pulsar 把主題分區(qū)劃分為更小的塊,稱其為分片陶衅。每個分片都作為 Apache BookKeeper ledger 來存儲屡立,這樣構(gòu)成分區(qū)的分片集合分布在 Apache BookKeeper 集群中。這樣設(shè)計方便我們管理容量和水平擴展搀军,并且滿足高吞吐量的需求侠驯。
- 容量管理簡單:主題分區(qū)的容量可以擴展至整個 BookKeeper 集群的容量抡秆,不受單個節(jié)點容量的限制。
- 擴容簡單:擴容無需重新平衡或復(fù)制數(shù)據(jù)吟策。添加新存儲節(jié)點時儒士,新節(jié)點僅用于新分片或其副本,Pulsar 自動平衡分片分布和集群中的流量檩坚。
- 高吞吐量:寫入流量分布在存儲層中着撩,不會出現(xiàn)分區(qū)寫入爭用單個節(jié)點資源的情況。
經(jīng)過深入調(diào)研后匾委,我們決定在騰訊 Angel PowerFL 聯(lián)邦學(xué)習(xí)平臺上使用 Apache Pulsar拖叙。
基于 Apache Pulsar 的聯(lián)邦通信方案
聯(lián)邦學(xué)習(xí)的各個業(yè)務(wù)(Angel PowerFL 稱之為 Party,每個 Party 有不同的 ID赂乐,如 10000/20000)薯鳍,可能分布在同個公司的不同部門(無網(wǎng)絡(luò)隔離),也可能分布在不同公司(跨公網(wǎng))挨措,各個 Party 之間通過 Pulsar 跨地域復(fù)制功能進(jìn)行同步復(fù)制挖滤,總體設(shè)計方案如下:
聯(lián)邦學(xué)習(xí)的每個訓(xùn)練任務(wù),通過消息的 producer 和 consumer 連接所在 Party 的 Pulsar 集群浅役,集群名以 fl-pulsar-[partyID] 進(jìn)行區(qū)分斩松,訓(xùn)練任務(wù)產(chǎn)生需要傳輸?shù)闹虚g數(shù)據(jù)后,生產(chǎn)者將這些數(shù)據(jù)發(fā)送給本地 Pulsar 集群觉既。
Pulsar 集群收到數(shù)據(jù)后惧盹,通過 Pulsar proxy 建立的同步復(fù)制網(wǎng)絡(luò)通道,將數(shù)據(jù)發(fā)送給使用方 Party瞪讼。而使用方 Party 的消費者钧椰,會一直監(jiān)聽該訓(xùn)練任務(wù)對應(yīng)的 topic,當(dāng)有數(shù)據(jù)到達(dá)后符欠,直接消費數(shù)據(jù)進(jìn)行下一步的計算嫡霞。
在 Angel PowerFL 執(zhí)行訓(xùn)練任務(wù)時,driver 和每個 partition 會創(chuàng)建一個 channel 類型變量背亥,該變量和 Pulsar 當(dāng)中具體的 topic 一一對應(yīng),需要交換的數(shù)據(jù)都會經(jīng)過生產(chǎn)者發(fā)送到這個 topic悬赏。
Angel PowerFL 支持多方聯(lián)邦狡汉,因此會有 2+ 個 Pulsar 集群需要同步復(fù)制數(shù)據(jù)。每個聯(lián)邦學(xué)習(xí)任務(wù)通過各自的 parties 任務(wù)參數(shù)指定了參與方闽颇,生產(chǎn)者在發(fā)送消息時調(diào)用setReplicationClusters
接口盾戴,確保數(shù)據(jù)只在參與 Party 之間傳輸。
在 Angel PowerFL 的通信模塊中兵多,我們充分利用了 Pulsar 的 geo--replication尖啡、topic 限流橄仆、Token Authentication 等功能。下面我來詳細(xì)介紹如何在 Angel PowerFL 聯(lián)邦學(xué)習(xí)平臺中使用 Pulsar衅斩。
Geo--replication 去掉Global ZooKeeper 依賴
在 Angel PowerFL 聯(lián)邦學(xué)習(xí)平臺上盆顾,部署一套完整的 Pulsar 依賴兩個 ZooKeeper 集群,分別是 Local ZooKeeper 和 Global ZooKeeper畏梆。Local ZooKeeper 和 Kafka 中的 ZooKeeper 作用類似您宪,用來存儲元數(shù)據(jù)。而 Global ZooKeeper 則在 Pulsar 多個集群間中共享配置信息奠涌。
在 Angel PowerFL 場景中宪巨,每個 Party 加入前,都要先部署一個 Global ZooKeeper 的子節(jié)點溜畅,或者共用一套跨公司或跨地域的公共 ZooKeeper捏卓,這樣不僅會增加部署的難度,也會增加被攻擊的風(fēng)險慈格,不利于新 Party 加入怠晴。
Global ZooKeeper 中存儲的元數(shù)據(jù),主要是集群名/服務(wù)地址/namespace 權(quán)限等信息峦椰。Pulsar 支持創(chuàng)建和加入新集群龄寞。我們通過以下兩個步驟注冊聯(lián)邦 Pulsar 集群的信息到 local ZooKeeper,就去除了對 Global ZooKeeper 的依賴:
步驟 1:注冊新加入 Party 的 Pulsar 集群
# OTHER_CLUSTER_NAME 為待注冊 Party 的 Pulsar 集群名
# OTHER_CLUSTER_BROKER_URL為 Pulsar 集群對應(yīng)的 broker 地址
./bin/pulsar-admin clusters create ${OTHER_CLUSTER_NAME}
--url http://${OTHER_CLUSTER_HTTP_URL}
--broker-url pulsar://${OTHER_CLUSTER_BROKER_URL}
步驟 2:授予訓(xùn)練用到的 namespace 訪問集群權(quán)限
./bin/pulsar-admin namespaces set-clusters fl-tenant/${namespace}
-clusters ${LOCAL_CLUSTR_NAME},${OTHER_CLUSTER_NAME}
對于新加入的 Party汤功,只用提供與其對應(yīng)的 Pulsar 的集群名/服務(wù)地址即可完成注冊物邑,geo-replication 就可以通過注冊信息同步復(fù)制數(shù)據(jù)。
Client 增加 Token 認(rèn)證
Pulsar 作為 Angel PowerFL 的通信模塊滔金,沒有加入用戶級別的權(quán)限控制色解。為了進(jìn)一步保證 client 生產(chǎn)和消費數(shù)據(jù)的安全,我們參考 Pulsar Client authentication using tokens based on JSON Web Tokens 增加了 token 認(rèn)證餐茵,Angel PowerFL 的訓(xùn)練任務(wù)除了配置當(dāng)前 Party 使用的服務(wù)地址外科阎,還需要配置 admin token。
https://pulsar.apache.org/doc...
由于 Angel PowerFL 整套系統(tǒng)部署在 Kubernetes 上忿族,我們通過容器準(zhǔn)備 Pulsar 集群需要的 Public/Private keys 等文件锣笨,然后注冊到 K8S secret 中。
# 生成 fl-private.key 和 fl-public.key
docker run --rm -v "$(pwd)":/tmp
apachepulsar/pulsar-all:2.5.2
/pulsar/bin/pulsar tokens create-key-pair --output-private-key
/tmp/fl-private.key --output-public-key /tmp/fl-public.key
# 生成 admin-token.txt token 文件
echo -n `docker run --rm -v
"$(pwd)":/tmp apachepulsar/pulsar-all:2.5.2
/pulsar/bin/pulsar tokens create --private-key
file:///tmp/fl-private.key --subject admin`
# 將認(rèn)證相關(guān)的文件注冊到 K8S
kubectl create secret generic token-symmetric-key
--from-file=TOKEN=admin-token.txt
--from-file=PUBLICKEY=fl-public.key -n ${PARTY_NAME}
開啟多集群 topic 自動回收
Pulsar 集群開啟了 geo--replication 功能后道批,無法通過命令直接刪除用過的 topic错英,而 Angel PowerFL 訓(xùn)練任務(wù)每次使用的任務(wù)是一次性的,任務(wù)結(jié)束后這些 topic 就沒用了隆豹,如果不及時刪除會出現(xiàn)大量累積椭岩。
對于通過 geo--replication 開啟復(fù)制的 topic,可以配置brokerDeleteInactivetopicsEnabled
參數(shù),開啟 topic 自動回收判哥。自動回收無用的 topic献雅,需滿足以下幾個條件:
- 當(dāng)前 topic 沒有生產(chǎn)者( producer)或者消費者(consumer)連接
- 當(dāng)前 topic 沒有被訂閱
- 當(dāng)前 topic 沒有需要保留的信息
Angel PowerFL 部署的 Pulsar 集群,通過 brokerDeleteInactivetopicsEnabled 開啟 topic 自動回收塌计。在執(zhí)行訓(xùn)練任務(wù)的過程中挺身,使用后對每個 topic 按回收條件進(jìn)行處理。同時夺荒,我們增加了
brokerDeleteInactivetopicsFrequencySeconds 配置瞒渠,將回收的頻率設(shè)置為 3 小時。
優(yōu)化 topic 限流
Angel PowerFL 中的訓(xùn)練任務(wù)技扼,在不同的數(shù)據(jù)集/算法/執(zhí)行階段伍玖,生產(chǎn)數(shù)據(jù)的流量峰值也不同。目前生產(chǎn)環(huán)境中單個任務(wù)最大的數(shù)據(jù)量超過 200G/小時剿吻。訓(xùn)練過程中窍箍,如果 Pulsar 連接中斷或者生產(chǎn)和消費過程出現(xiàn)異常,需要重新開始整個訓(xùn)練任務(wù)丽旅。
為了規(guī)避 Pulsar 集群被單個訓(xùn)練任務(wù)沖垮的風(fēng)險椰棘,我們使用了 Pulsar 的限流功能。Pulsar 支持 message-rate 和 byte-rate 兩種生產(chǎn)限流策略榄笙,前者限制每秒生產(chǎn)消息的數(shù)量邪狞,后者限制每秒生產(chǎn)消息的大小。Angel PowerFL 將數(shù)據(jù)切分成多個 4M 的消息茅撞,通過 message--rate 限制生產(chǎn)消息的數(shù)量帆卓。在 Angel PowerFL 中,我們將 namespace 的消息限制為 30 條(小于<30*4=120M/s):
./bin/pulsar-admin namespaces set-publish-rate fl-tenant/${namespace} -m 30
剛開始測試 message-rate 的限流功能時米丘,出現(xiàn)了限不住的情況(限流設(shè)置失效)剑令。騰訊數(shù)據(jù)平臺部 MQ 團隊負(fù)責(zé) Pulsar 的同事幫忙一起排查,發(fā)現(xiàn)設(shè)置 topicPublisherThrottlingTickTimeMillis 參數(shù)后拄查,限制不能生效吁津。
因此我們想辦法在 broker 端啟用了精確的 topic 發(fā)布頻率限制,優(yōu)化了限流功能并貢獻(xiàn)回社區(qū)堕扶,詳情見 PR-7078: introduce precise topic publish rate limiting碍脏。
https://github.com/apache/pul...
優(yōu)化 topic unloading 配置
Pulsar 根據(jù) broker 集群負(fù)載狀況,可以將 topic 動態(tài)分配到 broker上稍算。如果擁有該 topic 的broker 宕機典尾,或者擁有該 topic 的 broker 負(fù)載過大,則該 topic 會立即重新分配給另一個 broker 邪蛔;而重新分配的過程就是 topic 的 unloading急黎,該操作意味著關(guān)閉 topic,釋放所有者(owner)侧到。
理論上勃教,topic unloading 由負(fù)載均衡調(diào)整,客戶端將經(jīng)歷極小的延遲抖動匠抗,通常耗時 10ms 左右故源。但 Angel PowerFL 初期在執(zhí)行訓(xùn)練任務(wù)時,日志爆出大量因為 unloading topic 導(dǎo)致的連接異常汞贸。日志顯示 topic unloading 在不斷的重試绳军,但都不成功:
[sub] Could not get connection to broker: topic is temporarily unavailable -- Will try again in 0.1 s
先來看 broker/namespace/bundle/topic 這四者的關(guān)系。Bundle 是 Pulsar namespace 的一個分片機制矢腻,namespace 被分片為 bundle 列表门驾,每個 bundle 包含 namespace 的整個哈希范圍的一部分。Topic 不直接分配給 broker多柑,而是通過計算 topic 的哈希碼將 topic 分配給特定的 bundle奶是;每個 bundle 互相獨立,再被分配到不同的 broker 上竣灌。
Angel PowerFL 早期的任務(wù) topic 沒有復(fù)用聂沙,一個 LR 算法訓(xùn)練任務(wù)創(chuàng)建了 2000 多個 topic,每個 topic 生產(chǎn)的數(shù)據(jù)負(fù)載也不同初嘹,我們判斷上述斷連問題是由于短時間內(nèi)(最小任務(wù)十分鐘內(nèi)能結(jié)束及汉,同時會有多個任務(wù)在運行)大量創(chuàng)建和使用 topic,導(dǎo)致負(fù)載不均衡屯烦,topic unloading 頻繁發(fā)生坷随。為了降低 topic unloading 的頻率,我們調(diào)整了 Pulsar Bundle 的相關(guān)參數(shù):
# 增加 broker 可最大分配 topic 數(shù)量
loadBalancerBrokerMaxTopics=500000
# 啟用自動拆分namespace bundle
loadBalancerAutoBundleSplitEnabled=true
# 增加觸發(fā)拆分 bundle 的 topic 數(shù)量
loadBalancerNamespaceBundleMaxTopics=10000
# 增加觸發(fā)拆分 bundle 的消息數(shù)
loadBalancerNamespaceBundleMaxMsgRate=10000
同時漫贞,在創(chuàng)建 namespace 時甸箱,把 bundle 數(shù)量默認(rèn)設(shè)置為 64。
./bin/pulsar-admin namespaces create fl-tenant/${namespace} --bundles 64
經(jīng)過以上調(diào)整迅脐,Angel PowerFL 在任務(wù)執(zhí)行期間沒有再出現(xiàn)過由于 topic unloading 導(dǎo)致的斷連芍殖。
Pulsar on Kubernetes
Angel PowerFL 的所有服務(wù)均通過 Helm 部署在 Kubernetes 上。Pulsar 作為其中的一個 chart谴蔑,可以很好的利用 K8S 的資源隔離豌骏、快速擴縮容等特性。在 Angel PowerFL 使用 Helm 部署 Pulsar 的實踐中隐锭,我們總結(jié)了以下經(jīng)驗:
??? 使用 Local Persistent Volume 作為存儲
Pulsar 是 IO 敏感的服務(wù)窃躲,尤其 bookie 組件,在生產(chǎn)環(huán)境中建議使用 SSD 或獨立的磁盤钦睡。Angel PowerFL 在跑一些大數(shù)據(jù)集任務(wù)時蒂窒,Pulsar 經(jīng)常出現(xiàn) “No Bookies Available” 的異常。這期間磁盤的 IO 使用率很高。
我們通過 Local Persistent Volume 將 bookie 和 ZooKeeper 等其它組件掛載到單獨的磁盤洒琢,減緩了磁盤 IO 競爭秧秉。我們也測試過將 Pulsar 的 PV 存儲換成 Ceph 和 NFS,性能都沒有直接使用 Local Persistent Volume 好衰抑。
??? 使用 NodeSelector
Geo-replication 同步復(fù)制數(shù)據(jù)期間象迎,broker 需要訪問對方的 Pulsar proxy 容器赴叹。Angel PowerFL 將網(wǎng)關(guān)機單獨打了標(biāo)簽魔熏,通過 NodeSelector 將 broker 安裝在可訪問外網(wǎng)的網(wǎng)關(guān)機上。
??? 配置 useHostNameAsBookieID
Bookie 是有狀態(tài)的組件具帮,為了 bookie pod 重建后服務(wù)正常谭网,需要配置 useHostNameAsBookieID汪厨,確保向 ZooKeeper 注冊的 ID 是 pod 的 hostname。
未來計劃
Angel PowerFL 目前使用 Pulsar 快一年了愉择,穩(wěn)定運行時間最長的集群已經(jīng)超過半年骄崩,未來對Pulsar 的使用計劃主要有兩個。
?? 升級 Pulsar 到 2.6.x 版本
我們目前使用的是 Pulsar 2.5.2 版本薄辅,由于最近會使用 Pulsar Key_Shared 功能做 Angel-PS 的容災(zāi)恢復(fù)要拂。2.6.0 版本剛好有增強 Key_Shared 訂閱模式,所以我們預(yù)計未來一個月升級到 Pulsar 2.6.x站楚。
https://github.com/apache/pul...
?? Pulsar on K8S 支持多磁盤掛載
Angel PowerFL 所有服務(wù)都運行在 Kubernetes 上(除了任務(wù)使用的 YARN 計算資源)脱惰,Pulsar 作為其中的一個 chart 和其它服務(wù)一起部署,使用 Local Persistent Volume 作為存儲窿春。但目前 bookie 只支持掛載一塊磁盤(目錄)拉一,對于多磁盤的機器沒有更充分的利用,我們計劃增加該特性旧乞。
總結(jié)
我們介紹了在人工智能應(yīng)用場景下蔚润,使用 Pulsar 作為 Angel PowerFL 通信模塊的相關(guān)實踐。在方案實現(xiàn)過程當(dāng)中尺栖,我們充分使用了 Pulsar 諸多內(nèi)置特性嫡纠,并根據(jù)自身需求做了相關(guān)優(yōu)化,如 geo--replication 去掉 Global ZooKeeper 依賴延赌,為 client 增加 token 認(rèn)證除盏,開啟多集群 topic 自動回收,優(yōu)化 topic 限流功能和 topic unloading 配置等挫以。
Pulsar 作為下一代云原生分布式消息和流平臺者蠕,有眾多吸引人的功能,在直播與短視頻掐松、零售與電子商務(wù)踱侣、媒體粪小、金融等行業(yè)有廣泛應(yīng)用,期待 Pulsar 在不同的應(yīng)用場景下不斷有新的案例落地抡句。
致 謝
特別感謝騰訊數(shù)據(jù)平臺部 MQ 團隊糕再,在 Angel PowerFL 平臺使用 Pulsar 過程中給與的技術(shù)指導(dǎo)。該團隊在 Apache Pulsar 和 TubeMQ 上有多年的技術(shù)積累玉转,積極為 Pulsar 社區(qū)做出了巨大貢獻(xiàn)。Pulsar 社區(qū)十分活躍殴蹄,正處于快速成長之中究抓。我們會持續(xù)關(guān)注并和 Apache Pulsar 社區(qū)深入合作,把優(yōu)化的功能奉獻(xiàn)給 Pulsar 社區(qū)袭灯,和社區(qū)其他用戶一起進(jìn)一步完善刺下、優(yōu)化 Pulsar 的特性和功能,共同建設(shè)一個更強大完善的 Pulsar 社區(qū)稽荧。
作者簡介
張超橘茉,騰訊數(shù)據(jù)平臺部高級工程師,負(fù)責(zé) Angel PowerFL 聯(lián)邦通信/PowerFL on K8S 等工作姨丈。他和騰訊數(shù)據(jù)平臺部 MQ 團隊一起將 Apache Pulsar 引入 PowerFL 聯(lián)邦學(xué)習(xí)平臺畅卓,開啟了 Pulsar 在機器學(xué)習(xí)領(lǐng)域的應(yīng)用。