Skip to main content

Example

Minimal working example: connect to Fluss, create a table, write data, and read it back.

#include <iostream>
#include "fluss.hpp"

int main() {
// Connect
fluss::Configuration config;
config.bootstrap_servers = "127.0.0.1:9123";

fluss::Connection conn;
fluss::Connection::Create(config, conn);

fluss::Admin admin;
conn.GetAdmin(admin);

// Create a log table
fluss::TablePath table_path("fluss", "quickstart_cpp");
auto schema = fluss::Schema::NewBuilder()
.AddColumn("id", fluss::DataType::Int())
.AddColumn("name", fluss::DataType::String())
.Build();
auto descriptor = fluss::TableDescriptor::NewBuilder()
.SetSchema(schema)
.Build();
admin.CreateTable(table_path, descriptor, true);

// Write
fluss::Table table;
conn.GetTable(table_path, table);

fluss::AppendWriter writer;
table.NewAppend().CreateWriter(writer);

fluss::GenericRow row;
row.SetInt32(0, 1);
row.SetString(1, "hello");
writer.Append(row);
writer.Flush();

// Read
fluss::LogScanner scanner;
table.NewScan().CreateLogScanner(scanner);
auto info = table.GetTableInfo();
for (int b = 0; b < info.num_buckets; ++b) {
scanner.Subscribe(b, 0);
}
fluss::ScanRecords records;
scanner.Poll(5000, records);
for (const auto& rec : records) {
std::cout << "id=" << rec.row.GetInt32(0)
<< ", name=" << rec.row.GetString(1) << std::endl;
}

return 0;
}