點擊上方“zhisheng”,選擇“設爲星標”
後臺回覆"666",獲取新資料
集羣和部署
支持 Hadoop 3.0 及更高的版本:Flink 不再提供任何
flink-shaded-hadoop-
依賴。用戶可以通過配置 HADOOP_CLASSPATH 環境變量(推薦)或在 lib 文件夾下放入 Hadoop 依賴項。另外include-hadoop
Maven profile 也已經被移除了。移除了 LegacyScheduler:Flink 不再支持 legacy scheduler,如果你設置了
jobmanager.scheduler: legacy
將不再起作用並且會拋出 IllegalArgumentException 異常,該參數的默認值並且是唯一選項爲 ng。將用戶代碼的類加載器和 slot 的生命週期進行綁定:只要爲單個作業分配了至少一個 slot,TaskManager 就會重新使用用戶代碼的類加載器。這會稍微改變 Flink 的恢復行爲,從而不會重新加載靜態字段。這樣做的好處是,可以大大減輕對 JVM metaspace 的壓力。
slave 文件重命名爲 workers:對於 Standalone 模式安裝,worker 節點文件不再是 slaves 而是 workers,以前使用
start-cluster.sh
和stop-cluster.sh
腳本的設置需要重命名該文件。完善 Flink 和 Docker 的集成:
Dockerfiles
文件樣例和build.sh
Docker 鏡像文件都從 Flink GitHub 倉庫中移除了,這些示例社區不再提供,因此flink-contrib/docker-flink
、flink-container/docker
和flink-container/kubernetes
模塊都已刪除了。目前你可以通過查看 Flink Docker integration 官方文檔學會如何使用和自定義 Flink Docker 鏡像,文檔中包含了 docker run、docker compose、docker swarm 和 standalone Kubernetes。
內存管理
JobManager 使用新的內存模型:可以參考 FLIP-116,介紹了 JobManager 新的內存模型,提供了新的配置選項來控制 JobManager 的進程內存消耗,這種改變會影響 Standalone、YARN、Mesos 和 Active Kubernetes。如果你嘗試在不做任何調整的情況下重用以前的Flink 配置,則新的內存模型可能會導致 JVM 的計算內存參數不同,從而導致性能發生變化甚至失敗,可以參考 Migrate Job Manager Memory Configuration 文檔進行遷移變更。
jobmanager.heap.size
和jobmanager.heap.mb
配置參數已經過期了,如果這些過期的選項還繼續使用的話,爲了維持向後兼容性,它們將被解釋爲以下新選項之一:下面兩個選項已經刪除了並且不再起作用了:
JVM 參數,JobManager JVM 進程的 direct 和 metaspace 內存現在通過下面兩個參數進行配置:
如果沒有正確配置或存在相應的內存泄漏,這些新的限制可能會產生相應的 OutOfMemoryError 異常,可以參考 OutOfMemoryError 文檔進行解決。
jobmanager.memory.off-heap.size
jobmanager.memory.jvm-metaspace.size
containerized.heap-cutoff-ratio
containerized.heap-cutoff-min
jobmanager.memory.heap.size:JVM Heap,爲了 Standalone 和 Mesos 部署
jobmanager.memory.process.size:進程總內存,爲了容器部署(Kubernetes 和 YARN)
移除過期的
mesos.resourcemanager.tasks.mem
參數
Table API/SQL
Blink planner 成爲默認的 planner
改變了 Table API 的包結構:由於包
org.apache.flink.table.api.scala/java
中的各種問題,這些包下的所有類都已遷移。此外,如 Flink 1.9 中所述,scala 表達式已移至org.apache.flink.table.api
。如果你之前使用了下面的類:
如果你不需要轉換成 DataStream 或者從 DataStream 轉換,那麼你可以使用:
如果你需要轉換成 DataStream/DataSet,或者從 DataStream/DataSet 轉換,那麼你需要將依賴 imports 改成:
對於 Scala 表達式,使用下面的 import:
如果你使用 Scala 隱式轉換成 DataStream/DataSet,或者從 DataStream/DataSet 轉換,那麼該導入
org.apache.flink.table.api.bridge.scala._
org.apache.flink.table.api._ instead of org.apache.flink.table.api.bridge.scala._
org.apache.flink.table.api.bridge.java.StreamTableEnvironment
org.apache.flink.table.api.bridge.scala.StreamTableEnvironment
org.apache.flink.table.api.bridge.java.BatchTableEnvironment
org.apache.flink.table.api.bridge.scala.BatchTableEnvironment
org.apache.flink.table.api.TableEnvironment
org.apache.flink.table.api.java.StreamTableEnvironment
org.apache.flink.table.api.scala.StreamTableEnvironment
org.apache.flink.table.api.java.BatchTableEnvironment
org.apache.flink.table.api.scala.BatchTableEnvironment
移除 StreamTableSink 接口中的 emitDataStream 方法:該接口的 emitDataStream 方法將移除
移除 BatchTableSink 中的 emitDataSet 方法:將該接口的 emitDataSet 方法重命名爲 consumeDataSet 並且返回 DataSink
糾正
TableEnvironment.execute()
** 和**StreamTableEnvironment.execute()
的執行行爲:在早期的版本,TableEnvironment.execute()
和StreamExecutionEnvironment.execute()
都可以觸發 Table 程序和 DataStream 程序。從 Flink 1.11.0 開始,Table 程序只能由TableEnvironment.execute()
觸發。將 Table 程序轉換爲 DataStream 程序(通過toAppendStream()
或toRetractStream()
方法)後,只能由StreamExecutionEnvironment.execute()
觸發它。糾正
ExecutionEnvironment.execute()
和BatchTableEnvironment.execute()
的執行行爲:在早期的版本中,BatchTableEnvironment.execute()
和ExecutionEnvironment.execute()
都可以觸發 Table 和 DataSet 應用程序(針對老的 planner)。從 Flink 1.11.0 開始,批處理 Table 程序只能由BatchEnvironment.execute()
觸發。將 Table 程序轉換爲DataSet 程序(通過 toDataSet() 方法)後,只能由ExecutionEnvironment.execute()
觸發它。在 Row 類型中添加了更改標誌:在 Row 類型中添加了一個更改標誌 RowKind
配置
重命名
log4j-yarn-session.properties
和logback-yarn.xml
配置文件:日誌配置文件log4j-yarn-session.properties
和logback-yarn.xml
被重命名爲log4j-session.properties
和logback-session.xml
而且,yarn-session.sh
和kubernet -session.sh
使用這些日誌配置文件。
狀態
刪除已棄用的後臺清理開關:
StateTtlConfig#cleanupInBackground
已經被刪除,因爲在 1.10 中該方法已被棄用,並且默認啓用了後臺 TTL。刪除禁用 TTL 壓縮過濾器的的選項:默認情況下,RocksDB 中的 TTL 壓縮過濾器在 1.10 中是啓用的,在 1.11+ 中總是啓用的。因此,在 1.11 中刪除了以下選項和方法:
state.backend.rocksdb.ttl.compaction.filter.enabled
StateTtlConfig#cleanupInRocksdbCompactFilter()
RocksDBStateBackend#isTtlCompactionFilterEnabled
RocksDBStateBackend#enableTtlCompactionFilter
RocksDBStateBackend#disableTtlCompactionFilter
(state_backend.py) is_ttl_compaction_filter_enabled
(state_backend.py) enable_ttl_compaction_filter
(state_backend.py) disable_ttl_compaction_filter
改變
StateBackendFactory#createFromConfig
的參數類型:從 Flink 1.11 開始,StateBackendFactory
接口中的createFromConfig
方法中的參數變爲 ReadableConfig 而不是 Configuration。Configuration 類是 ReadableConfig 接口的實現類,因爲它實現了 ReadableConfig 接口,所以自定義 StateBackend 也應該做相應的調整。刪除過期的
OptionsFactory
和ConfigurableOptionsFactory
類:過期的 OptionsFactory 和 ConfigurableOptionsFactory 類已被刪除。請改用 RocksDBOptionsFactory 和 ConfigurableRocksDBOptionsFactory。如果任何類擴展了DefaultConfigurableOptionsFactory,也請重新編譯你的應用程序代碼。默認情況下啓用 setTotalOrderSeek:從 Flink 1.11 開始,默認情況下,RocksDB 的 ReadOptions 將啓用 setTotalOrderSeek 選項。這是爲了防止用戶忘記使用 optimizeForPointLookup。爲了向後兼容,我們支持通過 RocksDBOptionsFactory 自定義 ReadOptions。如果觀察到性能下降,請將 setTotalOrderSeek 設置爲 false(根據我們的測試,這種情況不應該發生)。
增加
state.backend.fs.memory-threshold
的默認值:state.backend.fs.memory-threshold
的默認值已從 1K 增加到20K,以防止在遠程 FS 上爲小狀態創建太多小文件。對於那些 source 處配置很多並行度或者有狀態的算子的作業可能會因此變更而出現JM OOM
或RPC message exceeding maximum frame size
的問題。如果遇到此類問題,請手動將配置設置回 1K。
PyFlink
對於不支持的數據類型將拋出異常:可以使用一些參數(例如,精度)來配置數據類型。但是,在以前的版本中,用戶提供的精度沒有任何效果,會使用該精度的默認值。爲了避免混淆,從 Flink 1.11 開始,如果不支持該數據類型,則將引發異常。更改包括:
TimeType
精度只能爲0
VarBinaryType
/VarCharType
的長度是0x7fffffff
DecimalType
可選值是38
/18
TimestampType
/LocalZonedTimestampType
的精度只能是3
DayTimeIntervalType
的單位是SECOND
,fractionalPrecision
精度只能爲3
YearMonthIntervalType
的單位是MONTH
,yearPrecision
精度只能爲2
CharType
/BinaryType
/ZonedTimestampType
不支持
監控
將所有的 MetricReporters 轉換爲 plugins:Flink 的所有 MetricReporters 都已經轉換爲 plugins,它們不再存放在 lib 目錄下(這樣做可能會導致依賴衝突),而應該放到
/plugins/<some_directory>
目錄下。改變 DataDog 的 metrics reporter Counter Metrics:現在 DataDog metrics reporter 程序將 Counter 指標上報爲報告時間間隔內的事件數,而不是總數,將 Counter 語義與 DataDog 文檔保持一致。
切換 Log4j2 爲默認的:Flink 現在默認使用 Log4j2,希望恢復到 Log4j1 的用戶可以在日誌文檔中找到操作說明
更改 JobManager API 的日誌請求行爲:從 JobManager 服務端請求一個不可用的 log 或者 stdout 文件現在會返回 404 狀態碼,在之前的版本中,會返回
file unavailable
。移除 lastCheckpointAlignmentBuffered metric:現在 lastCheckpointAlignmentBuffered metric 已經被移除了,因爲在發出 Checkpoint barrier 之後,上游的任務不會發送任何數據,直到下游側完成對齊爲止,WebUI 仍然會顯示該值,但現在始終爲 0。
Connectors
移除 Kafka 0.8/0.9 Connector
移除 ElasticSearch 2.x Connector
移除 KafkaPartitioner
改進的 fallback 文件系統,以只處理特定的文件系統
將
FileSystem#getKind
方法設置過期的
Runtime
流作業在 Checkpoint 同步部分失敗時會立即失敗:無論配置什麼參數,Checkpoint 同步部分中的失敗(如算子拋出異常)都將立即使其任務(和作業)失敗,從 Flink 1.5 版本開始,可以通過設置
setTolerableCheckpointFailureNumber(...)
或setFailTaskOnCheckpointError(...)
參數來忽略此類的失敗,現在這兩個參數隻影響異步的失敗。Checkpoint 超時不再被
CheckpointConfig#setTolerableCheckpointFailureNumber
忽略:現在將 Checkpoint 超時視爲正常的 Checkpoint 故障,並根據CheckpointConfig#setTolerableCheckpointFailureNumber
配置的值進行檢查。
各種接口變更
移除過期的
StreamTask#getCheckpointLock()
:在方法在 Flink 1.10 中已經設置過期了,目前不再提供該方法。用戶可以使用 MailboxExecutor 來執行需要與任務線程安全的操作。flink-streaming-java 模塊不再依賴 flink-client 模塊:從 Flink 1.11.0 開始,flink-streaming-java 模塊不再依賴 flink-client 模塊,如果你項目依賴於 flink-client 模塊,需要顯示的添加其爲依賴項。
AsyncWaitOperator 是可鏈接的:默認情況下,將允許 AsyncWaitOperator 與所有算子鏈接在一起,但帶有 SourceFunction 的任務除外。
更改了
ShuffleEnvironment
接口的createInputGates
和createResultPartitionWriters
方法的參數類型。CompositeTypeSerializerSnapshot#isOuterSnapshotCompatible
方法標示過期了。移除了過期的 TimestampExtractor:可以使用 TimestampAssigner 和 WatermarkStrategies。
將
ListCheckpointed
標示爲過期的:可以使用 CheckpointedFunction 作爲代替移除了過期的 state 連接方法:移除了
RuntimeContext#getFoldingState()
、OperatorStateStore#getSerializableListState()
和OperatorStateStore#getOperatorState()
連接狀態的方法,這意味着在 1.10 運行成功的代碼在 1.11 上是運行不了的。
詳情參考 https://ci.apache.org/projects/flink/flink-docs-master/release-notes/flink-1.11.html
基於 Apache Flink 的實時監控告警系統關於數據中臺的深度思考與總結(乾乾貨)日誌收集Agent,陰暗潮溼的地底世界
2020 繼續踏踏實實的做好自己
公衆號(zhisheng)裏回覆 面經、ES、Flink、 Spring、Java、Kafka、監控 等關鍵字可以查看更多關鍵字對應的文章。
你點的每個贊,我都當成了喜歡