Skip to content

StreamSets alternative — StreamSets vs Skippr ​

IBM StreamSets is a drag-and-drop pipeline studio. Control Hub is the plane. You pick a pipeline type. Data Collector streams records from one origin through processors to one or more destinations, continuously. Transformer runs set operations (joins, aggregates, sorts) on Apache Spark. Transformer for Snowflake turns the graph into SQL and hands it to Snowpark. CDC origins stamp sdc.operation.type (insert, update, delete, upsert) so a CRUD destination can apply it. Data drift processors try to keep the graph alive when a column appears. There is a Python SDK. IBM bought StreamSets in 2024. The current list price is 1,050 USD per virtual processor core per month, four VPCs minimum, twelve-month commit. The Team pack starts at 4,200 USD a month. Business Unit starts at 25,200. Enterprise starts at 105,000. Those figures are indicative. Cloud Pak and watsonx.data integration are other IBM doors. Data Collector engines still exist as Java processes you deploy; the product you buy is Control Hub.

Skippr is an open Streamhouse you run as one Rust binary. Write skippr.yml (or the same thing in Python), discover, sync. You query live state over Iceberg ∪ WAL, and the history is ordinary Iceberg in your bucket. No VPC meter. ELT into a warehouse is one path, not the product.

FeatureSkipprStreamSets
DeploySingle Rust binary, your VPC or on-premControl Hub SaaS or Cloud Pak. Data Collector / Transformer engines in your cloud or on-prem
SchemaIn-stream evolution, sibling columnsDrift processors on the graph. Catalog is per stage
StorageOpen Iceberg on Parquet you ownDestination you wired. Data Collector has no native Iceberg writer
CDCLog-based; fails closed if the dest cannot honourCDC origins plus sdc.operation.type on CRUD dests
Queryskipprd query on Iceberg ∪ WAL; history in any Iceberg engineDestination after the pipeline. Transformer SQL is Spark or Snowflake, not a lake
PricingFree self-hosted engine1,050 USD per VPC per month, four-VPC floor. See IBM's packs.

What StreamSets is good at ​

The split is honest. Record-at-a-time streaming is Data Collector. Whole-set Spark is Transformer. Snowflake-only SQL is Transformer for Snowflake. You do not pretend one engine does all three. Drift-aware processors and a preview in the canvas are why ops teams keep a graph running when a SaaS payload grows a field. CDC headers are a real contract, not a checkbox. If you already sit in IBM's catalog and want a low-code stream into Snowflake or Kafka, that is a real product.

Where the job is wider ​

StreamSets is a pipeline studio. It is not a Streamhouse. There is no Iceberg ∪ WAL. There is no skipprd query on in-flight rows. Data Collector takes one origin. Iceberg is not on the destination list; you land in S3, a warehouse, or a lake product that speaks Iceberg later.

The meter is cores, not rows. Four VPCs at the list rate is 4,200 USD a month before anyone draws a second graph. Packs quote pipeline counts and records per second as packaging, not a SLA you can take to finance without IBM. Engines still need Java, Spark, or a Snowflake warehouse.

Skippr will not give you Control Hub, the three pipeline types, or IBM's drift processors. Skippr also will not replace a 300-pipeline Control Hub estate. If the job is "draw a stream and pay IBM per core," StreamSets is the narrower tool. If the job is live SQL on Iceberg you run, StreamSets was never that.

Getting started ​

Install skipprd from the install guide, or pip install skippr. The three tabs write the same skippr.yml. Then discover, sync, and query.

yaml
skippr:
  workspace: analytics
  skipprd_el_storage_mode: local

pipelines:
  orders:
    data_source: data_sources.app_db
    data_sink: data_sinks.lake

data_sources:
  app_db:
    Postgres:
      host: db.internal
      user: skippr_reader
      password: ${APP_DB_PASSWORD}
      database: app
      tables: [orders, customers]
      cdc_mode: snapshot_then_cdc

data_sinks:
  lake:
    AthenaIceberg:
      warehouse: s3://my-iceberg-warehouse/
      glue_database_name: analytics
      athena_workgroup_name: primary
      athena_results_s3_bucket: my-athena-results
      region: us-east-1
    schema_sink: schema_sinks.lake_schema

schema_sinks:
  lake_schema:
    AthenaIceberg:
      warehouse: s3://my-iceberg-warehouse/
      glue_database_name: analytics
      athena_workgroup_name: primary
      athena_results_s3_bucket: my-athena-results
      region: us-east-1
bash
skipprd --workspace analytics --storage-mode local connect data-source postgres \
  --pipeline orders \
  --name app_db \
  --host db.internal \
  --user skippr_reader \
  --password '${APP_DB_PASSWORD}' \
  --database app \
  --tables orders \
  --tables customers \
  --cdc-mode snapshot_then_cdc

skipprd connect data-sink athenaiceberg \
  --pipeline orders \
  --name lake \
  --warehouse s3://my-iceberg-warehouse/ \
  --glue-database-name analytics \
  --athena-workgroup-name primary \
  --athena-results-s3-bucket my-athena-results \
  --region us-east-1

skipprd connect schema-sink athenaiceberg \
  --pipeline orders \
  --name lake_schema
python
from skippr import (
    Config,
    DataSinkAthenaIceberg,
    DataSourcePostgres,
    DataSourcePostgresSourceCdcMode,
    EnvRef,
    LocalStorage,
    Pipeline,
)

cfg = Config().workspace("analytics").storage(LocalStorage())

app_db = cfg.data_source(
    "app_db",
    DataSourcePostgres(
        host="db.internal",
        user="skippr_reader",
        password=EnvRef("APP_DB_PASSWORD"),
        database="app",
        tables=["orders", "customers"],
        cdc_mode=DataSourcePostgresSourceCdcMode.SNAPSHOTTHENCDC,
    ),
)

lake = cfg.data_sink(
    "lake",
    DataSinkAthenaIceberg(
        warehouse="s3://my-iceberg-warehouse/",
        glue_database_name="analytics",
        athena_workgroup_name="primary",
        athena_results_s3_bucket="my-athena-results",
        region="us-east-1",
    ),
    schema_sink="lake_schema",
)

cfg.pipeline("orders", Pipeline(data_source=app_db, data_sink=lake))
cfg.save("skippr.yml")
bash
export APP_DB_PASSWORD='your-postgres-password'
skipprd discover --pipeline orders
skipprd sync --pipeline orders --once
skipprd query "SELECT count(*) FROM analytics.orders"

Which to choose ​

Choose StreamSets if you want IBM's canvas, three pipeline engines, and a warehouse or Kafka after the graph is enough.

Choose Skippr if you want one binary, no VPC meter, live SQL, and Iceberg files that stay yours. Skippr will not replace Control Hub.

Install from Install. Connector and query reference live in Developer Docs. For optional onboarding in your VPC, Enterprise Jumpstart or Contact.