Algorithm
兩類查找問題(Set 和 Map)
Set用于查找有無 (檢查是否存在、去重問題)
Map用戶查找對(duì)應(yīng)關(guān)系(設(shè)置頻次)
349.Intersection of Two Arrays
350.Intersection of Two Arrays II
242.Valid Anagram
75.Sort Colors
202.Happy Number
1.Two Sum
219.Contains Duplicate II (set + 滑動(dòng)窗口)
Review
一乔妈、《Flink Table API編程》
講解了TableApi 比SQl 新增的易用性和功能性操作。
例如:
Columns Operation :AddColumns羡疗,AddOrReplaceColumns购桑,DropColumns,RenameColumns
Columns Function :withColumns(...)瑞凑,withoutColumns(...)
Map operation :def map(scalarFunction: Expression): Table
FlatMap operation :def flatMap(tableFunction: Expression): Table
Aggregate operation
TableAggregate operation
二会喝、《Flink Runtime核心機(jī)制剖析》
- Per-Job 和Sesson運(yùn)行模式區(qū)別:PerJob獨(dú)享Dispather和ResouceManager,按照需要申請(qǐng)資源玩郊,適合執(zhí)行時(shí)間長(zhǎng)的大作業(yè)肢执。Session則是共享Dispater、RM和資源的適合小作業(yè)译红。
Tips/Technology
一预茄、Kafka的重要參數(shù)設(shè)置
- Broker端
- log.dirs:指定Broker若干文件目錄,無默認(rèn)值侦厚。指定多塊盤的好處是提高讀寫性能耻陕,在1.1版本后又故障轉(zhuǎn)移能力。
- zookeeper.connect: 指定元數(shù)據(jù)zk路徑 CSV格式刨沦。
- listeners:多個(gè)Brokers相互通信的參數(shù)诗宣,告訴外部連接著是通過什么協(xié)議訪問主機(jī)名和端口訪問Kafka服務(wù)。(建議全部使用主機(jī)名想诅,否則可能發(fā)生無法連接的問題)
- Topic級(jí)別
- auto.create.topics.enable:是否允許自動(dòng)創(chuàng)建Topic召庞。建議為false
- unclean.leader.election.enable:是否允許Unclean Leader選舉。建議為false来破,否則可能會(huì)丟數(shù)據(jù)篮灼。
- auto.leader.rebalance.enable:是否允許定期進(jìn)行Leader選舉。生產(chǎn)建議為false徘禁,換leader代價(jià)很高诅诱。
- 數(shù)據(jù)留存
- log.retention.{hour|minutes|ms}:這是個(gè)“三兄弟”,都是控制一條消息數(shù)據(jù)被保存多長(zhǎng)時(shí)
間送朱。從優(yōu)先級(jí)上來說ms設(shè)置最高娘荡、minutes次之、hour最低驶沼。 - log.retention.bytes:這是指定Broker為消息保存的總磁盤容量大小它改。默認(rèn)是-1就是不做限制,但防止云上惡意使用磁盤商乎,可以設(shè)置央拖。
- message.max.bytes:控制Broker能夠接收的最大消息大小。默認(rèn)不到1k,生產(chǎn)環(huán)境基本不夠用要調(diào)大鲜戒。
- JVM端
- 指定堆大小 建議6G 使用方法: export KAFKA_HEAP_OPTS=--Xms6g --Xmx6g
- 指定GC參數(shù):jvm1.8建議G1回收器专控。使用方法:export KAFKA_JVM_PERFORMANCE_OPTS= -server -XX:+UseG1GC
- 操作系統(tǒng)
- 文件描述符限制: ulimit -n 1000000 否則動(dòng)不動(dòng)就來Too many open files錯(cuò)誤。
- 文件系統(tǒng)類型:ext3遏餐,ext4伦腐,XFS,ZFS
- Swappiness:0或者1,防止kafka使用swap空間失都,使用1可以看到kafka性能急劇下降便于診斷問題柏蘑。
- 提交時(shí)間。
二粹庞、Kafka中的分區(qū)
- 分布式系統(tǒng)中的叫法
Kafka中叫分區(qū)咳焚,在MongoDB和
Elasticsearch中就叫分片Shard,而在HBase中則叫Region庞溜,在Cassandra中又被稱作vnode革半。叫法不同但原理一樣。
- 分區(qū)策略
- 輪詢策略
- 隨機(jī)策略
- 按消息key保序策略
- 自定義策略 實(shí)現(xiàn) org.apache.kafka.clients.producer.Partitioner
kafka中如果指定了Key流码,那么默認(rèn)實(shí)現(xiàn)按消息鍵保序
策略又官;如果沒有指定Key,則使用輪詢策略漫试。
三六敬、Kafka中的壓縮算法
- 指定方式: props.put("compression.type", "gzip");在生產(chǎn)端指定會(huì)卸載消息中如何Producer端壓縮、Broker端保持驾荣、Consumer端解壓縮觉阅。
-
算法對(duì)比
四、Kafka數(shù)據(jù)零丟失
- 丟失場(chǎng)景
- 生產(chǎn)者程序丟失:程序已經(jīng)發(fā)送秘车,kafka沒有保存典勇。原因是kafka發(fā)消息都是異步的,如果消息太大叮趴,或者網(wǎng)絡(luò)抖動(dòng)就沒發(fā)上去割笙。
- 消費(fèi)者程序丟數(shù)據(jù):消費(fèi)者自動(dòng)提交,kafka就認(rèn)為已經(jīng)被消費(fèi)了眯亦。
- 最佳實(shí)踐
- 生產(chǎn)者Api不要用producer.send(msg)伤溉,而要使用producer.send(msg, callback)。并設(shè)置retries使其自動(dòng)重試妻率。
- 設(shè)置acks=all 乱顾,保證所有副本Borker都接受到消息,該消息才算提交宫静。
- 設(shè)置replication.factor >= 3走净,保證有充足的副本數(shù)
- 設(shè)置unclean.leader.election.enable = false券时。防止Broker落后Leader太多,然后被選上Leader導(dǎo)致數(shù)據(jù)丟失伏伯。
- 確保消息消費(fèi)完成再提交橘洞。Consumer端有個(gè)參數(shù)enable.auto.commit,最好把它設(shè)置成false说搅,并采用手
動(dòng)提交位移的方式炸枣。 - 設(shè)置min.insync.replicas > 1。這依然是Broker端參數(shù)弄唧,控制的是消息至少要被寫入到多少個(gè)副本才算
是“已提交”适肠。設(shè)置成大于1可以提升消息持久性。在實(shí)際環(huán)境中千萬不要使用默認(rèn)值1候引。 - 確保replication.factor > min.insync.replicas侯养。如果兩者相等,那么只要有一個(gè)副本掛機(jī)背伴,整個(gè)分區(qū)就無
法正常工作了沸毁。我們不僅要改善消息的持久性峰髓,防止數(shù)據(jù)丟失傻寂,還要在不降低可用性的基礎(chǔ)上完成。推
薦設(shè)置成replication.factor = min.insync.replicas + 1携兵。
五疾掰、Mysql整體架構(gòu)
六、事務(wù)隔離機(jī)制
- 讀未提交 (read uncommitted):一個(gè)事務(wù)還沒提交時(shí)徐紧,它做的變更就能被別的事務(wù)看到静檬。
- 讀提交 (read committed):一個(gè)事務(wù)提交之后,它做的變更才會(huì)被其他事務(wù)看到并级。
- 可重復(fù)讀 (repeatable read):一個(gè)事務(wù)執(zhí)行過程中看到的數(shù)據(jù)拂檩,總是跟這個(gè)事務(wù)在啟動(dòng)時(shí)看到的數(shù)據(jù)是一致的。當(dāng)然在可重復(fù)讀隔離級(jí)別下嘲碧,未提交變更對(duì)其他事務(wù)也是不可見的稻励。
- 串行化(serializable ),顧名思義是對(duì)于同一行記錄愈涩,“寫”會(huì)加“寫鎖”望抽,“讀”會(huì)加“讀鎖”。當(dāng)出現(xiàn)讀寫鎖沖突的時(shí)候履婉,后訪問的事務(wù)必須等前一個(gè)事務(wù)執(zhí)行完成煤篙,才能繼續(xù)執(zhí)行。
Oracle默認(rèn)隔離級(jí)別是 READ-COMMITTED
MySQL默認(rèn)隔離級(jí)別是 REPEATABLE-READ
實(shí)現(xiàn)原理:每條記錄在更新的時(shí)候都會(huì)記錄一條回滾操作毁腿,這個(gè)數(shù)據(jù)記錄在回滾日志中辑奈。當(dāng)在查詢的時(shí)候不同事務(wù)會(huì)有不同的read-view苛茂。
Share
《薄世寧:醫(yī)學(xué)通識(shí)》
- 生命是具有自我修復(fù)能力的,一切的醫(yī)療本質(zhì)都是支持自我修復(fù)身害,包括給自我修復(fù)爭(zhēng)取時(shí)間味悄,等他自我修復(fù)發(fā)揮作用。
- 我們?yōu)槭裁磿?huì)生菜臁侍瑟?答案就是科學(xué)發(fā)達(dá)了,我們活得壽命超過了細(xì)胞分裂的次數(shù)丙猬,疾病是人類進(jìn)化的遺產(chǎn)涨颜。
- 要堅(jiān)信任何病都有病理基礎(chǔ),不是憑空產(chǎn)生的茧球,那么找到治病的辦法只是時(shí)間問題庭瑰。
- 疾病不是突然發(fā)生的,而是突然發(fā)現(xiàn)的抢埋。
- 真正的健康是暴露于細(xì)菌的危險(xiǎn)之下弹灭,還依然健康。
Research
Flink 雙流join,Kafka分區(qū)及參數(shù)揪垄,Mysql知識(shí)鞏固