This is an automated email from the ASF dual-hosted git repository.
ipolyzos pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fluss.git
The following commit(s) were added to refs/heads/main by this push:
new f2ab4b54e fix image urls (#2547)
f2ab4b54e is described below
commit f2ab4b54e1b128d38eb2878acc732451958bdbe5
Author: Giannis Polyzos <[email protected]>
AuthorDate: Mon Feb 2 10:26:12 2026 +0200
fix image urls (#2547)
---
website/blog/2026-02-01-fluss-fraud-detection.md | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/website/blog/2026-02-01-fluss-fraud-detection.md
b/website/blog/2026-02-01-fluss-fraud-detection.md
index 78107b8d7..3ac39831b 100644
--- a/website/blog/2026-02-01-fluss-fraud-detection.md
+++ b/website/blog/2026-02-01-fluss-fraud-detection.md
@@ -73,7 +73,7 @@ I implemented this architecture using the following
technology stack:
### Data flow
-
+
The Fluss Java Client initializes the Fluss tables on the Fluss cluster and
generates live records.
Specifically, three tables are created at startup:
@@ -372,7 +372,7 @@ public class FraudDetectionJob {
```
Each step of the streaming pipeline, such as reading from the source, applying
transformations, and writing to the sink, has been modeled as a strategy. These
strategies are combined into the ```FraudPipeline``` which implements the
```FlinkPipeline``` interface. The ```FlinkPipeline``` interface is accountable
to hold and combine the strategies, exposing the ```compose``` and ```run```
signatures. The ```compose``` method is used to chain the strategies together,
while the ```run``` met [...]
-<img src="assets/fluss_fraud_detection/flinkpipe.jpg" width="100%"
height="100%" />
+
```java
public class FraudPipeline implements FlinkPipeline {
@@ -418,7 +418,7 @@ There are 4 strategies interfaces with different
accountability explained in the
#### 1. InitCatalogStrategy interface and InitFlinkCatalogStrategy
implementation
This interface defines the catalog initialization, exposing the ```init```
method.
-<img src="assets/fluss_fraud_detection/catstr.png" width="35%" height="35%" />
+
The ```InitFlinkCatalogStrategy``` implementation, which extends
```InitCatalogStrategy```, overrides the ```init``` method to define and
activate a Flink catalog, enabling the use of the Fluss tables.
@@ -440,7 +440,7 @@ public void init() {
#### 2. SourceStrategy interface and TransactionFlussSourceStrategy
implementation
This interface represents the reading from a source and returning records with
a DataStream Flink API of type `DataStream<T>`, exposing the `createSource`
signature.
-<img src="assets/fluss_fraud_detection/soustr.png" width="35%" height="35%" />
+
The `TransactionFlussSourceStrategy` implementation overrides the
`createSource` method to read from the Fluss Transaction table using the
[FlussSource](https://fluss.apache.org/docs/engine-flink/datastream/#datastream-source)
connector and return a `DataStream<Transaction>`.
@@ -480,7 +480,7 @@ public Transaction deserialize(LogRecord record) throws
Exception {
#### 3. TransformStrategy interface and FraudTransformStrategy implementation
This interface models the transformation applied to a Datastreams. It takes a
`Datastream<I>`, returns `Datastream<O>` exposing the `transform` method.
-<img src="assets/fluss_fraud_detection/fraudstr.png" width="35%" height="35%"
/>
+
The `FraudTransformStrategy` implementation overrides the `transform` method,
which takes a `DataStream<Transaction>` as a parameter and returns a
`DataStream<Fraud>` after applying the following transformations:
1. ```keyBy(Transaction::getAccountId)```: groups the Transaction stream by
```accountId``` so that all transactions with the same ```accountId``` go to
the same parallel subtask. After keyBy, you get a KeyedStream, which enables
per-key state and timers.
@@ -544,7 +544,7 @@ public void processElement(Transaction transaction, Context
context, Collector<F
#### 4. EnrichedFraudTransformStrategy implementation
-<img src="assets/fluss_fraud_detection/enfraudstr.png" width="35%"
height="35%" />
+
The `EnrichedFraudTransformStrategy` implementation reads the
`Datastream<Fraud>` and perform an enrichment adding the account name for each
record.
This is done switching from Flink Datastream API to Flink Table API and
performing a temporal look up join against the the Fluss Account table which
acts as a dimension.
@@ -595,7 +595,7 @@ Enriched records are converted back and returned as a
`DataStream<EnrichedFraud>
### 5. SinkStrategy interface and FraudFlussSinkStrategy implementation
This interface models the writing of a `Datastream<T>` to the FlinkSink,
exposing the `createSink` method.
-<img src="assets/fluss_fraud_detection/sinkstr.png" width="35%" height="35%" />
+
`FraudFlussSinkStrategy` reads the `Datastream<Fraud>` and sinks record to
Fluss Fraud table leveraging
[FlussSink](https://fluss.apache.org/docs/engine-flink/datastream/#datastream-sink)
sink connector.