Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion website/docs/apis/cpp/error-handling.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ See `fluss::ErrorCode` in `fluss.hpp` for the full list of named constants.

## Retry Logic

Some errors are transient, where the server may be temporarily unavailable, mid-election, or under load. `IsRetriable()` can be used for deciding to to retry an operation rather than treating the error as permanent.
Some errors are transient, where the server may be temporarily unavailable, mid-election, or under load. `IsRetriable()` can be used for deciding to retry an operation rather than treating the error as permanent.

`ErrorCode::IsRetriable(int32_t code)` is a static helper available directly on the error code:

Expand Down
2 changes: 1 addition & 1 deletion website/docs/concepts/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ In upcoming releases, **ZooKeeper will be replaced** by **KvStore** for metadata
- **Hierarchical Storage for LogStores:** By offloading LogStore data, it reduces storage costs and accelerates scaling operations.
- **Persistent Storage for KvStores:** It ensures durable storage for KvStore data and collaborates with LogStore to enable fault recovery.

Additionally, **Remote Storage** allows clients to perform bulk read operations on Log and Kv data, enhancing data analysis efficiency and reduce the overhead on Fluss servers. In the future, it will also support bulk write operations, optimizing data import workflows for greater scalability and performance.
Additionally, **Remote Storage** allows clients to perform bulk read operations on Log and Kv data, enhancing data analysis efficiency and reducing the overhead on Fluss servers. In the future, it will also support bulk write operations, optimizing data import workflows for greater scalability and performance.

## Client
Fluss clients/SDKs support streaming reads/writes, batch reads/writes, DDL and point queries. Currently, the main implementation of client is Flink Connector. Users can use Flink SQL to easily operate Fluss tables and data.
10 changes: 5 additions & 5 deletions website/docs/engine-flink/delta-joins.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Starting with **Apache Fluss 0.8**, streaming join jobs running on **Flink 2.1 o

## How Delta Join Works

Traditional streaming joins in Flink require maintaining both input sides entirely in state to match records across streams. Delta join, by contrast, uses a **index-key lookup mechanism** to transform the behavior of querying data from the state into querying data from the Fluss source table, thereby avoiding redundant storage of the same data in both the Fluss source table and the state. This drastically reduces state size and improves performance for many streaming analytics and enrichment workloads.
Traditional streaming joins in Flink require maintaining both input sides entirely in state to match records across streams. Delta join, by contrast, uses an **index-key lookup mechanism** to transform the behavior of querying data from the state into querying data from the Fluss source table, thereby avoiding redundant storage of the same data in both the Fluss source table and the state. This drastically reduces state size and improves performance for many streaming analytics and enrichment workloads.

![](../assets/delta_join.png)

Expand Down Expand Up @@ -49,7 +49,7 @@ CREATE TABLE `fluss_catalog`.`my_db`.`left_src` (
) WITH (
-- prefix key
'bucket.key' = 'city_id',
-- in Flink 2.1, delta join only support append-only source
-- in Flink 2.1, delta join only supports append-only source
'table.merge-engine' = 'first_row'
);
```
Expand All @@ -61,7 +61,7 @@ CREATE TABLE `fluss_catalog`.`my_db`.`right_src` (
`city_name` VARCHAR NOT NULL,
PRIMARY KEY (city_id) NOT ENFORCED
) WITH (
-- in Flink 2.1, delta join only support append-only source
-- in Flink 2.1, delta join only supports append-only source
'table.merge-engine' = 'first_row'
);
```
Expand Down Expand Up @@ -120,7 +120,7 @@ Sink(table=[fluss_catalog.my_db.snk], fields=[city_id, order_id, content, city_n

Delta Join relies on performing lookups by the join key (e.g., the `city_id` in the above example) on the Fluss source tables. This requires that the Fluss source tables are defined with appropriate index on the join key to enable efficient lookups.

Currently, Fluss only supports to defines a single index key per table, which is also referred to as the **prefix key**. The general secondary index which allows define multiple indexes with arbitrary fields is planned to be supported in the near future releases.
Currently, Fluss only supports defining a single index key per table, which is also referred to as the **prefix key**. The general secondary index which allows defining multiple indexes with arbitrary fields is planned to be supported in the near future releases.

A prefix key defines the portion of a table’s primary key that can be used for efficient key-based lookups or index pruning.

Expand Down Expand Up @@ -157,7 +157,7 @@ There is a known issue ([FLINK-38399](https://issues.apache.org/jira/browse/FLIN
#### Limitations

- The primary key or the prefix key of the tables must be included as part of the equivalence conditions in the join.
- The join must be a INNER join.
- The join must be an INNER join.
- The downstream node of the join must support idempotent updates, typically it's an upsert sink and should not have a `SinkUpsertMaterializer` node before it.
- Flink planner automatically inserts a `SinkUpsertMaterializer` when the sink’s primary key does not fully cover the upstream update key.
- You can learn more details about `SinkUpsertMaterializer` by reading this [blog](https://www.ververica.com/blog/flink-sql-secrets-mastering-the-art-of-changelog-events).
Expand Down
4 changes: 2 additions & 2 deletions website/docs/engine-flink/lookups.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,8 +135,8 @@ For more details about Fluss partitioned table, see [Partitioned Tables](table-d

### Instructions

- Use a primary key table as a dimension table, and the join condition must a prefix subset of the primary keys of the dimension table.
- The bucket key of Fluss dimension table need to set as the join key when creating Fluss table.
- Use a primary key table as a dimension table, and the join condition must be a prefix subset of the primary keys of the dimension table.
- The bucket key of Fluss dimension table needs to be set as the join key when creating Fluss table.
- Fluss prefix lookup join is in asynchronous mode by default for higher throughput. You can change the mode of prefix lookup join as synchronous mode by setting the SQL Hint `'lookup.async' = 'false'`.


Expand Down
Loading