Project: Flink (App Definition and Development / Streaming & Messaging)
File: flink-1.18.md

title: "Release Notes - Flink 1.18" <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> These release notes discuss important aspects, such as configuration, behavior or dependencies, that changed between Flink 1.17 and Flink 1.18. Please read these notes carefully if you are planning to upgrade your Flink version to 1.18. Apache Flink was made ready to compile and run with Java 17 (LTS). This feature is still in beta mode. Issues should be reported in Flink's bug tracker. Introduction of the new ConfigOption `DISPLAYMAXCOLUMN_WIDTH` (`table.display.max-column-width`) in the TableConfigOptions class is now in place. This option is utilized when displaying table results through the Table API and SQL Client. As SQL Client relies on the Table API underneath, and both SQL Client and the Table API serve distinct and isolated scenarios, it is a rational choice to maintain a centralized configuration. This approach also simplifies matters for users, as they only need to manage one ConfigOption for display control. During the migration phase, while `sql-client.display.max-column-width` is deprecated, any changes made to `sql-client.display.max-column-width` will be automatically transferred to `table.display.max-column-width`. Caution is advised when using the CLI, as it is not recommended to switch back and forth between these two options. Apache Flink now supports JDBC driver to access SQL Gateway, you can use the driver in any cases that support standard JDBC extension to connect to Flink cluster. Flink now enables user config watermark emit strategy/watermark alignment/watermark idle-timeout in Flink SQL job with dynamic table options and 'OPTIONS' hint. Support lazy initialization of catalog and persistence of catalog configuration. ManagedTable related APIs are deprecated and will be removed in a future major release. SplitReader interface now extends `AutoCloseable` instead of providing its own method

The JSON format introduced JsonParser as a new default way to deserialize JSON data. JsonParser is a Jackson JSON streaming API to read JSON data which is much faster and consumes less memory compared to the previous JsonNode approach. This should be a compatible change, if you encounter any issues after upgrading, you can fallback to the previous JsonNode approach by setting `json.decode.json-parser.enabled` to `false`. Fine-grained resource management are now enabled by default. You can use it by specifying the resource requirement. More details can be found at https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/finegrained_resource/#usage. This performance improvement would be good to mention in the release blog post. As proven by the micro benchmarks (screenshots attached in the ticket), with 5000 subtasks, the time to calculate the watermark alignment on the JobManager by a factor of 76x (7664%). Previously such large jobs were actually at large risk of overloading JobManager, now that's far less likely to happen. Flink's RPC framework is now based on Apache Pekko instead of Akka. Any Akka dependencies were removed. We introduced a runtime filter for batch jobs in 1.18, which is designed to improve join performance. It will dynamically generate filter conditions for certain Join queries at runtime to reduce the amount of scanned or shuffled data, avoid unnecessary I/O and network transmission, and speed up the query. Its working principle is building a filter(e.g. bloom filter) based on the data on the small table side(build side) first, then passing this filter to the large table side(probe side) to filter the irrelevant data on it, this can reduce the data reaching the join and improve performance. The watermark alignment is ready for production since Flink 1.18, which completed a series of bug fixes and improvements related to watermark alignment. Please refer to for more information. Fix the issue that redundant TaskManagers will not be fulfilled in FineGrainedSlotManager periodically. Fix a bug in the RestClient where making a request after the client was closed returns a future that never completes. The Queryable State feature is formally deprecated. It will be removed in future major version bumps. DataSet API is formally deprecated, and will be removed in the next major release. Due to CALCITE-4861 (Optimization of chained CAST calls can lead to unexpected behavior), also Flink's casting behavior has slightly changed. Some corner cases might behave differently now: For example, casting from `FLOAT`/`DOUBLE` 9234567891.12 to `INT`/`BIGINT` has now Java behavior for overflows.