Twitter把Kafka當(dāng)作存儲(chǔ)系統(tǒng)使用,使用kafka的公司-ESG跨境

Twitter把Kafka當(dāng)作存儲(chǔ)系統(tǒng)使用,使用kafka的公司

來源網(wǎng)絡(luò)
來源網(wǎng)絡(luò)
2022-05-08
點(diǎn)贊icon 0
查看icon 657

Twitter把Kafka當(dāng)作存儲(chǔ)系統(tǒng)使用,使用kafka的公司Twitter把Kafka當(dāng)作存儲(chǔ)系統(tǒng)使用當(dāng)開發(fā)者通過API消費(fèi)Twitter的公共數(shù)據(jù)時(shí),他們需要獲得可靠性、速度和穩(wěn)定性方面的保證。因此,在不久前,我們推出了Account Activity Replay API幫助開發(fā)者們提升他們系統(tǒng)的穩(wěn)定性。這個(gè)A......

Twitter把Kafka當(dāng)作存儲(chǔ)系統(tǒng)使用,使用kafka的公司




Twitter把Kafka當(dāng)作存儲(chǔ)系統(tǒng)使用

當(dāng)開發(fā)者通過API消費(fèi)Twitter的公共數(shù)據(jù)時(shí),他們需要獲得可靠性、速度和穩(wěn)定性方面的保證。因此,在不久前,我們推出了Account Activity Replay API幫助開發(fā)者們提升他們系統(tǒng)的穩(wěn)定性。這個(gè)API是一個(gè)數(shù)據(jù)恢復(fù)工具,開發(fā)者可以用它來檢索最早發(fā)生在5天前的事件,恢復(fù)由于各種原因(包括在實(shí)時(shí)傳遞時(shí)突然發(fā)生的服務(wù)器中斷)沒有被傳遞的事件。

除了構(gòu)建API來提升開發(fā)者體驗(yàn),我們還做了一些優(yōu)化:

·提高Twitter內(nèi)部工程師的生產(chǎn)力。

·保持系統(tǒng)的可維護(hù)性。具體來說,就是盡量減少開發(fā)人員、站點(diǎn)可靠性工程師和其他與系統(tǒng)交互的人員的上下文切換。

基于這些原因,在構(gòu)建這個(gè)API所依賴的回放系統(tǒng)時(shí),我們利用了Account Activity API現(xiàn)有的實(shí)時(shí)系統(tǒng)設(shè)計(jì)。這有助于我們重用現(xiàn)有的工作,并最小化上下文切換負(fù)擔(dān)和培訓(xùn)工作。

實(shí)時(shí)系統(tǒng)采用了發(fā)布和訂閱架構(gòu)。為了保持架構(gòu)的一致性,構(gòu)建一個(gè)可以讀取數(shù)據(jù)的存儲(chǔ)層,我們想到了傳統(tǒng)的流式技術(shù)——Kafka。

1

背景

兩個(gè)數(shù)據(jù)中心產(chǎn)生實(shí)時(shí)事件,事件被寫入到跨數(shù)據(jù)中心的主題上,實(shí)現(xiàn)數(shù)據(jù)冗余。

但并不是所有的事件都需要被傳遞,所以會(huì)有一個(gè)內(nèi)部應(yīng)用程序負(fù)責(zé)對(duì)事件進(jìn)行篩選。這個(gè)應(yīng)用程序消費(fèi)來自這些主題的事件,根據(jù)保存在鍵值存儲(chǔ)中的一組規(guī)則來檢查每一個(gè)事件,并決定是否應(yīng)該通過我們的公共API將消息傳遞給特定的開發(fā)者。事件是通過Webhook傳遞的,每個(gè)Webhook URL都有一個(gè)開發(fā)人員負(fù)責(zé)維護(hù),并有唯一的ID標(biāo)識(shí)。

圖1:數(shù)據(jù)生成管道

2

存儲(chǔ)和分區(qū)

通常,在構(gòu)建一個(gè)需要存儲(chǔ)層的回放系統(tǒng)時(shí),人們可能會(huì)使用基于Hadoop和HDFS的架構(gòu)。但我們選擇了Kafka,主要基于以下兩個(gè)原因:

·已有的實(shí)時(shí)系統(tǒng)采用了發(fā)布和訂閱架構(gòu);

·回放系統(tǒng)存儲(chǔ)的事件量不是PB級(jí)的,我們存儲(chǔ)的數(shù)據(jù)不會(huì)超過幾天。此外,執(zhí)行Hadoop的MapReduce作業(yè)比在Kafka上消費(fèi)數(shù)據(jù)成本更高、速度更慢,達(dá)不到開發(fā)者的期望。

要利用實(shí)時(shí)管道來構(gòu)建回放管道,首先要確保事件被存儲(chǔ)在Kafka中。我們把Kafka主題叫作deliverylog,每個(gè)數(shù)據(jù)中心都有一個(gè)這樣的主題。然后,這些主題被交叉復(fù)制,實(shí)現(xiàn)數(shù)據(jù)冗余,以便支持來自數(shù)據(jù)中心之外的重放請(qǐng)求。事件在被傳遞之前經(jīng)過去重操作。

在這個(gè)Kafka主題上,我們使用默認(rèn)的分區(qū)機(jī)制創(chuàng)建了多個(gè)分區(qū),分區(qū)與WebhookId的散列值(事件記錄的鍵)一一對(duì)應(yīng)。我們考慮過使用靜態(tài)分區(qū),但最終決定不使用它,因?yàn)槿绻渲幸粋€(gè)開發(fā)人員生成的事件多于其他開發(fā)人員,那么這個(gè)分區(qū)包含的數(shù)據(jù)將多于其他分區(qū),造成了分區(qū)的不均衡。相反,我們選擇固定數(shù)量的分區(qū),然后使用默認(rèn)分區(qū)策略來分布數(shù)據(jù),這樣就降低了分區(qū)不均衡的風(fēng)險(xiǎn),并且不需要讀取Kafka主題的所有分區(qū)。重放服務(wù)基于請(qǐng)求的WebhookId來確定要讀取哪個(gè)分區(qū),并為該分區(qū)啟動(dòng)一個(gè)新的Kafka消費(fèi)者。主題的分區(qū)數(shù)量不會(huì)發(fā)生變化,因?yàn)檫@會(huì)影響鍵的散列和事件的分布。

我們使用了固態(tài)磁盤,根據(jù)每個(gè)時(shí)間段讀取的事件數(shù)量來分配空間。我們選擇這種磁盤而不是傳統(tǒng)的硬盤驅(qū)動(dòng)器,以此來獲得更快的處理速度,并減少與查找和訪問操作相關(guān)的開銷。因?yàn)槲覀冃枰L問低頻數(shù)據(jù),無法獲得頁(yè)面緩存優(yōu)化的好處,所以最好是使用固態(tài)磁盤。

為了最小化存儲(chǔ)空間,我們使用了snappy壓縮算法。我們知道大部分處理工作都在消費(fèi)端,之所以選擇snappy,是因?yàn)樗诮鈮簳r(shí)比其他Kafka所支持的壓縮算法(如gzip和lz4)更快。

3

請(qǐng)求和處理

在我們?cè)O(shè)計(jì)的這個(gè)系統(tǒng)中,通過API調(diào)用來發(fā)快遞重放請(qǐng)求。我們從請(qǐng)求消息體中獲取WebhookId和要重放的事件的日期范圍。這些請(qǐng)求被持久化到MySQL中,相當(dāng)于進(jìn)入了隊(duì)列,直到它們被重放服務(wù)讀取。請(qǐng)求中的日期范圍用于確定要讀取的分區(qū)的偏移量。消費(fèi)者對(duì)象的offsetForTimes函數(shù)用于獲取偏移量。

圖2:重放系統(tǒng)接收請(qǐng)求,并將請(qǐng)求發(fā)快遞給配置服務(wù)(數(shù)據(jù)訪問層),然后被持久化到數(shù)據(jù)庫(kù)中。

重放服務(wù)處理每個(gè)重放請(qǐng)求,它們通過MySQL相互協(xié)調(diào),處理數(shù)據(jù)庫(kù)中的下一個(gè)需要重放的記錄。重放進(jìn)程定期輪詢MySQL,獲取需要被處理的掛起作業(yè)。一個(gè)請(qǐng)求會(huì)在各種狀態(tài)之間轉(zhuǎn)換。等待被處理的請(qǐng)求處于開放狀態(tài)(OPEN STATE),剛退出隊(duì)列的請(qǐng)求處于啟動(dòng)狀態(tài)(STARTED STATE),正在被處理的請(qǐng)求處于進(jìn)行中狀態(tài)(ONGOING STATE),已處理完成的請(qǐng)求將轉(zhuǎn)換到已完成狀態(tài)(COMPLETED STATE)。一個(gè)重放進(jìn)程只會(huì)選擇一個(gè)尚未啟動(dòng)的請(qǐng)求(即處于打開狀態(tài)的請(qǐng)求)。

每隔一段時(shí)間,當(dāng)一個(gè)工作進(jìn)程將一個(gè)請(qǐng)求退出隊(duì)列后,它會(huì)在MySQL表中寫入時(shí)間戳,表示正在處理當(dāng)前的重放作業(yè)。如果重放進(jìn)程在處理請(qǐng)求時(shí)死掉了,相應(yīng)的作業(yè)將被重新啟動(dòng)。因此,除了將處于打開狀態(tài)的請(qǐng)求退出隊(duì)列之外,重放操作還將讀取處于已開始或正在進(jìn)行中的、在預(yù)定義的分鐘數(shù)內(nèi)沒有心跳的作業(yè)。

圖3:數(shù)據(jù)傳遞層:重放服務(wù)通過輪詢MySQL來讀取作業(yè),消費(fèi)來自Kafka的消息,并通過Webhook服務(wù)傳遞事件。

在讀取事件時(shí)會(huì)進(jìn)行去重操作,然后事件被發(fā)布到消費(fèi)者端的Webhook URL上。去重是通過維護(hù)被讀取事件的散列值緩存來實(shí)現(xiàn)的。如果遇到具有相同散列值的事件,就不傳遞這個(gè)事件。

總的來說,我們的解決方案與傳統(tǒng)的將Kafka作為實(shí)時(shí)、流式系統(tǒng)的用法不一樣。我們成功地將Kafka作為存儲(chǔ)系統(tǒng),構(gòu)建了一個(gè)API,在進(jìn)行事件恢復(fù)時(shí)提升了用戶體驗(yàn)和數(shù)據(jù)訪問能力。我們利用已有的實(shí)時(shí)系統(tǒng)設(shè)計(jì)讓系統(tǒng)的維護(hù)變得更加容易。此外,客戶數(shù)據(jù)的恢復(fù)速度達(dá)到了我們的預(yù)期。

原文鏈接

https://blog.twitter.com/engineering/enus/topics/infrastructure/2020/kafkaasastoragesystem.html


文章推薦
TikTok訪問太過頻繁怎么辦,tiktok 連不上網(wǎng)
被頭部發(fā)行打回6款產(chǎn)品
WhatsApp群控是什么,whatsapp群聊有用嗎
阿里云短信服務(wù)如何配置,如何開通阿里云短信服務(wù)


特別聲明:以上文章內(nèi)容僅代表作者本人觀點(diǎn),不代表ESG跨境電商觀點(diǎn)或立場(chǎng)。如有關(guān)于作品內(nèi)容、版權(quán)或其它問題請(qǐng)于作品發(fā)表后的30日內(nèi)與ESG跨境電商聯(lián)系。

搜索 放大鏡
韓國(guó)平臺(tái)交流群
加入
韓國(guó)平臺(tái)交流群
掃碼進(jìn)群
歐洲多平臺(tái)交流群
加入
歐洲多平臺(tái)交流群
掃碼進(jìn)群
美國(guó)賣家交流群
加入
美國(guó)賣家交流群
掃碼進(jìn)群
ESG跨境專屬福利分享群
加入
ESG跨境專屬福利分享群
掃碼進(jìn)群
拉美電商交流群
加入
拉美電商交流群
掃碼進(jìn)群
亞馬遜跨境增長(zhǎng)交流群
加入
亞馬遜跨境增長(zhǎng)交流群
掃碼進(jìn)群
亞馬遜跨境增長(zhǎng)交流群
加入
亞馬遜跨境增長(zhǎng)交流群
掃碼進(jìn)群
拉美電商交流群
加入
拉美電商交流群
掃碼進(jìn)群
ESG獨(dú)家招商-PHH GROUP賣家交流群
加入
ESG獨(dú)家招商-PHH GROUP賣家交流群
掃碼進(jìn)群
《TikTok官方運(yùn)營(yíng)干貨合集》
《TikTok綜合運(yùn)營(yíng)手冊(cè)》
《TikTok短視頻運(yùn)營(yíng)手冊(cè)》
《TikTok直播運(yùn)營(yíng)手冊(cè)》
《TikTok全球趨勢(shì)報(bào)告》
《韓國(guó)節(jié)日營(yíng)銷指南》
《開店大全-全球合集》
《開店大全-主流平臺(tái)篇》
《開店大全-東南亞篇》
《CD平臺(tái)自注冊(cè)指南》
通過ESG入駐平臺(tái),您將解鎖
綠色通道,更高的入駐成功率
專業(yè)1v1客戶經(jīng)理服務(wù)
運(yùn)營(yíng)實(shí)操指導(dǎo)
運(yùn)營(yíng)提效資源福利
平臺(tái)官方專屬優(yōu)惠

立即登記,定期獲得更多資訊

訂閱
聯(lián)系顧問

平臺(tái)顧問

平臺(tái)顧問 平臺(tái)顧問

微信掃一掃
馬上聯(lián)系在線顧問

icon icon

小程序

微信小程序

ESG跨境小程序
手機(jī)入駐更便捷

icon icon

返回頂部

【免費(fèi)領(lǐng)取】全球跨境電商運(yùn)營(yíng)干貨 關(guān)閉
進(jìn)行中
進(jìn)行中
【活動(dòng)報(bào)名】2024年歐洲多藍(lán)海平臺(tái)招商沙龍
官方親臨,拆解phh group/eMAG/worten三個(gè)平臺(tái)商機(jī)
立即報(bào)名
進(jìn)行中
進(jìn)行中
TikTok運(yùn)營(yíng)必備干貨包
包含8個(gè)TikTok最新運(yùn)營(yíng)指南(市場(chǎng)趨勢(shì)、運(yùn)營(yíng)手冊(cè)、節(jié)日攻略等),官方出品,專業(yè)全面!
免費(fèi)領(lǐng)取
進(jìn)行中
進(jìn)行中
韓國(guó)電商節(jié)日營(yíng)銷指南
10+韓國(guó)電商重要營(yíng)銷節(jié)點(diǎn)詳細(xì)解讀;2024各節(jié)日熱度選品助力引爆訂單增長(zhǎng);8大節(jié)日營(yíng)銷技巧輕松撬動(dòng)大促流量密碼。
免費(fèi)領(lǐng)取
進(jìn)行中
進(jìn)行中
全球平臺(tái)詳解——全球合集
涵括全球100+個(gè)電商平臺(tái)的核心信息,包括平臺(tái)精煉簡(jiǎn)介、競(jìng)爭(zhēng)優(yōu)勢(shì)、熱銷品類、入駐要求以及入駐須知等關(guān)鍵內(nèi)容。
立即領(lǐng)取
進(jìn)行中
進(jìn)行中
全球平臺(tái)詳解——主流平臺(tái)篇
火爆全球的跨境電商平臺(tái)合集,平臺(tái)優(yōu)勢(shì)、開店選品、入駐條件盡在掌握
立即領(lǐng)取
進(jìn)行中
進(jìn)行中
全球平臺(tái)詳解——拉美篇
涵蓋9大熱門拉美電商平臺(tái),成熟的市場(chǎng)是跨境賣家的熱門選擇!
立即領(lǐng)取
進(jìn)行中
進(jìn)行中
全球平臺(tái)詳解——日韓篇
涵蓋10+日韓電商平臺(tái),入駐條件一看就懂,優(yōu)勢(shì)熱銷品應(yīng)有盡有
立即領(lǐng)取
進(jìn)行中
進(jìn)行中
全球平臺(tái)詳解——?dú)W洲篇
涵蓋20+歐洲電商平臺(tái),詳細(xì)解讀優(yōu)勢(shì)、入駐條件、熱銷品等
立即領(lǐng)取