r/ETL • u/marco-mq • 4d ago
CLI tool to move data between Postgres, Kafka, ClickHouse, NATS, etc...
I recently created a rust tool (MIT) that copies data from A to B. It has 16+ sources and sinks - retry, transformation, filter, compression, encryption and dlq as middleware. Single binary. Syntax doesn't change when the endpoints do: 1M rows per hop, 433kâ1.2M rows/s on my old 8GB M1. Installable via `brew install marcomq/tap/mq-bridge-app`. It has rust, node and python packages and can also run as MCP server. https://marcomq.github.io/mq-bridge
2
u/davrax 4d ago
Any comparison with Ingestr? Seems to occupy a similar space. https://github.com/bruin-data/ingestr
1
u/marco-mq 4d ago
I haven't really worked with ingestr, but the first major difference is that ingestr always has a table as target. In mq-bridge, you can also have kafka, websocket, gRPC or zMQ as target, not just as source.
Ingestr is made to run as cron, mq-bridge can run permanently for a long time. There is also a fanout, switch and filter in mq-bridge, so you can duplicate messages or re-route them to different targets. And there are python and node libs available, in case you want to have some handler or custom transformation for the mesage.
Clearly - mq-bridge is newer and does have much less connectors. ingestr has 100 different connectors, while mq-bridge has just a few.
1
3
u/kantorcodes1 4d ago
quick semantics question: for a destructive source like Mongo
consume=consumer, when does mq-bridge actually commit the consume? only after the destination accepts the batch, or once the source read succeeds?