偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

使用Scala開發(fā)Apache Kafka的TOP 20大好用實踐

大數(shù)據(jù) Kafka
本文作者是一位軟件工程師,他對20位開發(fā)人員和數(shù)據(jù)科學家使用Apache Kafka的方式進行了最大限度得深入研究,最終將生產(chǎn)實踐環(huán)節(jié)需要注意的問題總結(jié)為本文所列的20條建議。

本文作者是一位軟件工程師,他對20位開發(fā)人員和數(shù)據(jù)科學家使用Apache Kafka的方式進行了***限度得深入研究,最終將生產(chǎn)實踐環(huán)節(jié)需要注意的問題總結(jié)為本文所列的20條建議。 

Apache Kafka是一個廣受歡迎的分布式流媒體平臺,New Relic、Uber以及Square等數(shù)千家公司都在使用它構(gòu)建可擴展、高吞吐量、可靠的實時流媒體系統(tǒng)。例如,New Relic的Kafka集群每秒處理超過1500萬條消息,總數(shù)據(jù)速率接近1 Tbps。

Kafka在應(yīng)用程序開發(fā)人員和數(shù)據(jù)科學家中非常受歡迎,因為它極大簡化了數(shù)據(jù)流的處理過程。但是,Kafka在Scala上實踐會比較復雜。如果消費者無法跟上數(shù)據(jù)流,并且消息在他們看到之前就消失了,那么具有自動數(shù)據(jù)保留限制的高吞吐量發(fā)布/訂閱模式并沒有多大用。同樣,如果托管數(shù)據(jù)流的系統(tǒng)無法擴展以滿足需求或者不可靠,也沒有什么用。

為了降低這種復雜性,作者將可能的問題分為4大類共20條,以方便用戶理解:

  • Partitions(分區(qū))
  • Consumers(消費者)
  • Producers(生產(chǎn)者)
  • Brokers

Kafka是一種高效分布式消息傳遞系統(tǒng),可提供內(nèi)置數(shù)據(jù)冗余和彈性,同時保留高吞吐量和可擴展性。它包括自動數(shù)據(jù)保留限制,使其非常適合將數(shù)據(jù)視為流的應(yīng)用程序,并且還支持對鍵值對映射建模的“壓縮”流。

了解***實踐之前,你需要熟悉一些關(guān)鍵術(shù)語:

  • Message消息:Kafka中的記錄或數(shù)據(jù)單元。每條消息都有一個鍵(key)和一個值(value),以及可選標題。
  • 生產(chǎn)者:生產(chǎn)者向Kafka的topic發(fā)布消息。生產(chǎn)者決定要發(fā)布哪個topic分區(qū),可以隨機(循環(huán))或使用基于消息密鑰的分區(qū)算法。
  • Broker:Kafka在分布式系統(tǒng)或集群中運行,集群中的每個節(jié)點都稱為broker。
  • Topic:Topic是發(fā)布數(shù)據(jù)記錄或消息的類別。消費者訂閱topic以讀取寫入其中的數(shù)據(jù)。
  • Topic partition:topic分為多個分區(qū),每個消息都有一個偏移量。每個分區(qū)通常至少復制一或兩次。每個分區(qū)都有一個leader和至少一個副本(數(shù)據(jù)副本),這些副本存在于follower身上,可以防止broker失敗。集群中的所有broker都是leader和follower,但是代理最多只有一個topic partition副本,leader用于所有讀寫操作。
  • 偏移:為分區(qū)內(nèi)的每條消息分配一個偏移量,這是一個單調(diào)遞增整數(shù),用作分區(qū)內(nèi)消息的唯一標識符。
  • 消費者:消費者通過訂閱 topic partition讀取Kafka主題的消息,消費應(yīng)用程序,并處理消息以完成所需工作。
  • Consumer group:消費者可以組織成消費者群組,分配topic partition以平衡組中所有使用者。在消費者群組中,所有消費者都在負載均衡模式下工作。換句話說,組中每個消費者都將看到每條消息。如果一個消費者離開,則將該分區(qū)分配給該組中的其他消費者,這個過程稱為再平衡。如果組中的消費者多于分區(qū),則一些消費者將閑置。如果組中的消費者少于分區(qū),則某些消費者將使用來自多個分區(qū)的消息。
  • Lag:當消費者無法從分區(qū)中讀取消息,消費者就會出現(xiàn)Lag,表示為分區(qū)頂部后的偏移數(shù)。從Lag狀態(tài)恢復所需的時間取決于消費者每秒消耗消息的速度:
  1. time = messages / (consume rate per second - produce rate per second

***部分:使用分區(qū)的***實踐!

在分區(qū)部分,我們需要了解分區(qū)的數(shù)據(jù)速率,以確保擁有正確的保留空間。分區(qū)的數(shù)據(jù)速率是生成數(shù)據(jù)的速率。換句話說,它是平均消息大小乘以每秒消息數(shù)。數(shù)據(jù)速率決定了給定時間內(nèi)所需的保留空間(以字節(jié)為單位)。如果不知道數(shù)據(jù)速率,則無法正確計算滿足基本保留目標所需的空間大小。數(shù)據(jù)速率指定了單個消費者需要支持的***性能而保證不會出現(xiàn)Lag。

除非有其他架構(gòu)需求,否則在寫入topic時使用隨機分區(qū)。當進行大規(guī)模操作時,分區(qū)之間的數(shù)據(jù)速率不均可能難以管理。需要注意以下三方面:

1、首先,“熱點”(更高吞吐量)分區(qū)的消費者必須處理比消費者群組中其他消費者更多的消息,這可能導致處理和網(wǎng)絡(luò)瓶頸。

2、其次,必須為具有***數(shù)據(jù)速率的分區(qū)調(diào)整topic保留空間大小,這可能會導致topic中其他分區(qū)的磁盤使用量增加。

3、***,在分區(qū)領(lǐng)導方面實現(xiàn)***平衡比簡單地擴展到所有 brokers更復雜。“熱點”分區(qū)的份量可能是同一topic中另一分區(qū)的10倍。

第二部分:使用消費者***實踐!

如果消費者運行的Kafka版本低于0.10,請升級。在0.8.x版本中,消費者使用Apache ZooKeeper進行消費者群組協(xié)調(diào),并且許多已知錯誤可能導致長期運行的平衡甚至是重新平衡算法的失敗(我們稱之為“重新平衡風暴”)。在重新平衡期間,將一個或多個分區(qū)分配給使用者群組中的每個使用者。在再平衡中,分區(qū)所有權(quán)在消費者中不斷變通,阻止任何消費者在消費方面取得實際進展。

4、調(diào)整消費者套接字緩沖區(qū)以進行高速獲取。在Kafka 0.10.x中,參數(shù)為isreceive.buffer.bytes,默認為64kB。在Kafka 0.8.x中,參數(shù)是socket.receive.buffer.bytes,默認為100kB。對于高吞吐量環(huán)境,這兩個默認值都太小,特別是如果brocker和消費者之間的網(wǎng)絡(luò)帶寬延遲大于局域網(wǎng)(LAN)。對于延遲為1毫秒或更長的高帶寬網(wǎng)絡(luò)(10 Gbps或更高),請考慮將套接字緩沖區(qū)設(shè)置為8或16 MB。如果內(nèi)存不足,請考慮1 MB,也可以使用值-1,這樣底層操作系統(tǒng)可以根據(jù)網(wǎng)絡(luò)條件調(diào)整緩沖區(qū)大小。但是,對于需要啟動“熱點”消費者的系統(tǒng)而言,自動調(diào)整的速度可能或比較慢。

5、設(shè)計高吞吐量消費者,以便在有保證的情況下實施背壓,***只消耗可以有效處理的東西,而不是消耗太多,以至于過程停止,退出消費者群組。 消費者應(yīng)該使用固定大小的緩沖區(qū)(參見Disruptor模式),如果在Java虛擬機(JVM)中運行,***是在堆外使用。固定大小的緩沖區(qū)將阻止消費者將大量數(shù)據(jù)拖到堆上,JVM花費所有時間來執(zhí)行垃圾收集而不是做你想讓它處理的工作——處理消息。

6、在JVM上運行消費者時,請注意垃圾回收可能對消費者產(chǎn)生的影響。例如,垃圾收集較長時間暫停可能導致ZooKeeper會話或者消費者組失去平衡。對于brocker來說也是如此,如果垃圾收集暫停時間過長,則可能會從集群中退出。 

[[241360]]

第三部分:使用生產(chǎn)者***實踐!

7、配置生產(chǎn)者等待確認。 這就是生產(chǎn)者如何知道消息實際已經(jīng)發(fā)送到brocker上的分區(qū)。在Kafka 0.10.x中,設(shè)置為acks; 在0.8.x中,它是request.required.acks。Kafka通過復制提供容錯功能,因此單個節(jié)點的故障或分區(qū)leader的更改不會影響可用性。如果將生產(chǎn)者配置為沒有ack(也稱為“fire and forget”),則消息可能會無聲地丟失。

8、配置生產(chǎn)者重試次數(shù)。默認值為3,通常太低。正確的值取決于需求,對于無法容忍數(shù)據(jù)丟失的應(yīng)用程序,請考慮Integer.MAX_VALUE(實際上是無窮大),這可以防止leader分區(qū)的brocker無法立即響應(yīng)生產(chǎn)請求。

9、對于高吞吐量生產(chǎn)者,調(diào)整緩沖區(qū)大小,特別是buffer.memory和batch.size(以字節(jié)為單位)。由于batch.size是按分區(qū)設(shè)置的,因此生產(chǎn)者性能和內(nèi)存使用量可與topic中的分區(qū)數(shù)相關(guān)聯(lián)。這里的值取決于幾個因素:生產(chǎn)者數(shù)據(jù)速率(消息的大小和數(shù)量),生成的分區(qū)數(shù)以及可用的內(nèi)存量。請記住,較大的緩沖區(qū)并不總是好的,如果生產(chǎn)者由于某種原因而停頓(例如,一個***通過確認響應(yīng)較慢),在堆上緩存更多數(shù)據(jù)可能會導致更多垃圾收集。

10、制定應(yīng)用程序跟蹤指標,例如生成的消息數(shù),平均生成的消息大小和消耗的消息數(shù)。

第四部分:brocker***實踐!

11、Topic需要brocker的內(nèi)存和CPU資源,日志壓縮需要brocker上的堆(內(nèi)存)和CPU周期才能成功完成,并且失敗的日志壓縮會使brocker處于***增長的分區(qū)風險中。你可以在brocker上使用tunelog.cleaner.dedupe.buffer.size和log.cleaner.threads,但請記住,這些值會影響brocker上的堆使用情況。如果brocker拋出OutOfMemoryError異常,它將關(guān)閉并可能丟失數(shù)據(jù)。緩沖區(qū)大小和線程數(shù)將取決于要清理的主題分區(qū)數(shù)量以及這些分區(qū)中消息的數(shù)據(jù)速率和密鑰大小。從Kafka 0.10.2.1版本開始,監(jiān)視日志清理程序日志文件以查找ERROR條目是檢測日志清理程序線程問題的最可靠方法。

12、監(jiān)控brocker的網(wǎng)絡(luò)吞吐量。確保使用發(fā)送(TX)和接收(RX),磁盤I/O,磁盤空間和CPU使用率來執(zhí)行此操作。容量規(guī)劃是維護集群性能的關(guān)鍵部分。

13、在集群中的brocker之間分配分區(qū)leader,其需要大量的網(wǎng)絡(luò)I/O資源。例如,當使用復制因子3運行時,leader必須接收分區(qū)數(shù)據(jù),并同步傳遞給所有副本,再傳輸給想要使用該數(shù)據(jù)的消費者。因此,在這個例子中,作為***,在使用網(wǎng)絡(luò)I/O方面至少是follower的四倍,leader必須從磁盤讀取,follower只需要寫。

14、不要忽略監(jiān)視brocker的同步副本(ISR)縮減,重復不足的分區(qū)和不受歡迎的lesder。這些是集群中潛在問題的跡象。例如,單個分區(qū)的頻繁ISR收縮可能表明該分區(qū)的數(shù)據(jù)速率超過了leader為消費者和副本線程提供服務(wù)的能力。

15、根據(jù)需要修改Apache Log4j屬性。Kafka代理日志記錄可能會占用過多磁盤空間。但是,不要完全放棄日志記錄,brocker日志可能是在事件發(fā)生后重建事件序列的***方式,有時也是唯一方式。

16、禁用topic自動創(chuàng)建有關(guān)的明確策略,定期清理未使用的topic。例如,如果x天沒有看到任何消息,請考慮topic失效并將其從集群中刪除,這樣可以避免在集群中創(chuàng)建必須管理的其他元數(shù)據(jù)。

17、對于持續(xù)的高吞吐量代理,請?zhí)峁┳銐虻膬?nèi)存以避免從磁盤系統(tǒng)讀取,應(yīng)盡可能直接從操作系統(tǒng)的文件系統(tǒng)緩存中提供分區(qū)數(shù)據(jù)。但是,這意味著必須確保消費者能夠跟上,滯后的消費者將迫使brocker從磁盤讀取。

18、對于具有高吞吐量服務(wù)級別目標(SLO)的大型集群,請考慮將topic隔離到brocker子集。如何確定要隔離的topic取決于業(yè)務(wù)需求,例如,如果有多個使用相同集群的聯(lián)機事務(wù)處理(OLTP)系統(tǒng),則將每個系統(tǒng)的topic隔離到brocker的不同子集以幫助限制事件的潛在爆炸半徑。

19、使用較新topic消息格式的舊客戶端(反之亦然)會在brocker客戶端轉(zhuǎn)換格式時對brocker程序施加額外負擔,盡可能避免這種情況。

20、不要認為在本地臺式機上測試brocker代表在實際生產(chǎn)環(huán)境中的性能。使用復制因子1對分區(qū)的環(huán)回接口進行測試是與大多數(shù)生產(chǎn)環(huán)境完全不同的拓撲。通過環(huán)回可以忽略網(wǎng)絡(luò)延遲,并且在不涉及復制時,接收leader確認所需的時間可能會有很大差異。

責任編輯:未麗燕 來源: it168網(wǎng)站
相關(guān)推薦

2024-03-08 22:39:55

GolangApacheKafka

2018-08-30 09:00:00

開源Apache Kafk數(shù)據(jù)流

2015-10-10 15:09:46

推薦工具Linux

2010-08-17 09:49:18

Div Css

2021-01-29 23:14:31

人臉識別軟件工具

2017-12-26 05:59:44

Linux服務(wù)器操作系統(tǒng)

2009-12-09 10:15:08

2017-12-06 15:27:21

IntelliJ插件Grep Consol

2024-05-31 08:30:23

2021-04-10 15:34:09

LinuxLinux好處

2011-08-19 14:08:17

正版windows7

2011-08-17 13:55:25

VoIPPBX

2019-10-09 14:21:25

物聯(lián)網(wǎng)智能停車傳感器

2023-09-01 10:31:02

云計算云挑戰(zhàn)

2019-06-03 11:13:17

商業(yè)物聯(lián)網(wǎng)物聯(lián)網(wǎng)IOT

2023-06-07 16:21:16

2016-11-21 17:36:24

AR出版

2022-02-19 21:22:23

Kafka事務(wù)API的

2020-05-17 15:40:11

智能停車商業(yè)模式IOT

2011-08-23 13:43:48

點贊
收藏

51CTO技術(shù)棧公眾號