Tools for configuring and migrating to TIBCO FTL(R) Service for Kafka (FSK) persistence clusters.
| Tool | Language | Description |
|---|---|---|
| tibfsk/importconfig | Go | Translates Apache Kafka KRaft server.properties into FSK artifacts (ftlserver.json, tibftlserver-cluster.yaml, etc.) — start with getting-started.md |
| tibfsk/importdata | Java | Replicates records from a source Apache Kafka cluster to a target FSK cluster |
Coming from an existing Apache Kafka cluster? Start with
tibfsk/importconfig/getting-started.md, which converts
the server.properties you already run into a working FSK configuration across twelve worked
scenarios, from a single plaintext broker up to a secured three-node cluster. It is the only guide
you need: the flag-by-flag reference, the output file details and the worked examples are sections
at the end of it. importdata is a separate job — moving the records over after the
configuration is in place.
The migration tool also ships a runnable demo scenario — see tibfsk/importdata/README.md for the four end-to-end paths.
The repository checks in a built copy of each tool, so a clone runs with no Go toolchain and no
javac:
| Artifact | Built from | Used by |
|---|---|---|
tibfsk/importconfig/bin/tibftlimportconfig |
the Go sources, for linux/amd64 | run it directly |
tibfsk/importdata/classes/ |
tibfsk/importdata/src/main/java |
run-apachekafka-to-fsk.sh |
tibfsk/importdata/demo/classes/ |
tibfsk/importdata/demo/InsuranceDataProducer.java |
demo/populate-kafka.sh |
Both scripts prefer classes/ and fall back to compiling into build/ only when it is missing.
Set FSK_FORCE_REBUILD=1 to compile from source anyway after editing the Java.
The binary is linux/amd64, statically linked with CGO_ENABLED=0. Build from source (below)
for any other platform, or pass GOOS/GOARCH to the script. The class files are
platform-independent.
To refresh the artifacts after changing a source file:
export KAFKA_HOME=/path/to/kafka # or set KAFKA_CLASSPATH directly
./build-artifacts.shThe checked-in class files were compiled with JDK 25 targeting --release 17, so they load on the
Java 17 listed below and on anything newer. GO, GOOS, GOARCH, JAVAC, JAVA_RELEASE and
KAFKA_CLASSPATH override the defaults. Nothing refreshes these artifacts automatically — re-run
the script and commit the result whenever the sources change.
CMake ignores the checked-in artifacts and builds from source into its own binary directory.
Building is optional. The documentation throughout this repository refers to the checked-in
artifacts above — tibfsk/importconfig/bin/tibftlimportconfig and
tibfsk/importdata/classes/ — which is what a clone runs by default. Build from source when you
need a platform other than linux/amd64, or when you are changing the tools themselves.
| Requirement | Minimum | Notes |
|---|---|---|
| CMake | 3.15 | |
| Go | 1.25 | For tibftlimportconfig. Set GO_EXECUTABLE if the right version is not first on PATH. |
| Java (JDK) | 17 | For tibftlfskimportdata. The checked-in classes were built with JDK 25. |
| Apache Kafka client jars | — | kafka-clients.jar + slf4j-api.jar; see below. |
# Create a build directory outside the source tree.
mkdir build && cd build
# Configure — provide KAFKA_CLASSPATH for the Java tool.
cmake .. \
-DKAFKA_CLASSPATH="/path/kafka-clients.jar:/path/slf4j-api.jar"
# Build.
cmake --build .List the jars explicitly, colon-separated. A
libs/*wildcard does not work here — the shell expands it inside thejavacrule and every jar after the first is passed as a flag (error: invalid flag: .../activation-1.1.1.jar). The wildcard form is only valid for the runtimeKAFKA_CLASSPATHread byrun-apachekafka-to-fsk.sh.
Outputs:
build/tibftlimportconfig— ready-to-run binarybuild/tibfsk/importdata/classes/— compiled Java class files (run viarun-apachekafka-to-fsk.sh)
javac runs only when the classes are missing or a .java source has changed, so repeat builds
are no-ops. Because the compiled classes are installed next to run-apachekafka-to-fsk.sh, the
script finds them and skips compiling entirely at run time — set FSK_FORCE_REBUILD=1 if you edit
the sources and want the script to recompile.
mkdir build && cd build
cmake .. # omit -DKAFKA_CLASSPATH; Java tool is skipped with a warning
cmake --build . --target tibftlimportconfig_buildOmitting -DKAFKA_CLASSPATH is not an error: the Java tool's compile step is skipped and the
sources ship as-is, so run-apachekafka-to-fsk.sh compiles them into build/ on first use.
cmake --build . --target tibftlfskimportdataIf Go 1.25+ is not on your PATH but is installed elsewhere:
cmake .. -DGO_EXECUTABLE=/usr/local/go/bin/goThe Apache Kafka client jars are not bundled in this repository. Common sources:
- Apache Kafka installation:
$KAFKA_HOME/libs/kafka-clients-*.jarand$KAFKA_HOME/libs/slf4j-api-*.jar - Maven Central:
org.apache.kafka:kafka-clientsandorg.slf4j:slf4j-api
At runtime, run-apachekafka-to-fsk.sh also needs a logging binding such as slf4j-simple.jar.
cmake --install . --prefix /usr/localInstalls:
/usr/local/bin/tibftlimportconfig/usr/local/share/tibftlfskimportdata/(classes, conf, run script)
BSD 3-Clause. See LICENSE for the full text and NOTICE for attribution.