All Projects → batchcorp → Plumber

batchcorp / Plumber

Licence: mit
A swiss army knife CLI tool for interacting with Kafka, RabbitMQ and other messaging systems.

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Plumber

Qmq
QMQ是去哪儿网内部广泛使用的消息中间件,自2012年诞生以来在去哪儿网所有业务场景中广泛的应用,包括跟交易息息相关的订单场景; 也包括报价搜索等高吞吐量场景。
Stars: ✭ 2,420 (+370.82%)
Mutual labels:  event-driven, kafka, rabbitmq, message-queue, message-bus
Benthos
Fancy stream processing made operationally mundane
Stars: ✭ 3,705 (+620.82%)
Mutual labels:  kafka, rabbitmq, message-queue, message-bus
Enqueue Dev
Message Queue, Job Queue, Broadcasting, WebSockets packages for PHP, Symfony, Laravel, Magento. DEVELOPMENT REPOSITORY - provided by Forma-Pro
Stars: ✭ 1,977 (+284.63%)
Mutual labels:  kafka, rabbitmq, message-queue, message-bus
Enqueue Bundle
[READ-ONLY] Message queue bundle for Symfony. RabbitMQ, Amazon SQS, Redis, Service bus, Async events, RPC over MQ and a lot more
Stars: ✭ 233 (-54.67%)
Mutual labels:  rabbitmq, message-queue, message-bus
OpenSleigh
OpenSleigh is a Saga management library for .NET Core.
Stars: ✭ 198 (-61.48%)
Mutual labels:  rabbitmq, message-bus, message-queue
Myth
Reliable messages resolve distributed transactions
Stars: ✭ 1,470 (+185.99%)
Mutual labels:  protobuf, kafka, rabbitmq
Spring Cloud Stream Demo
Simple Event Driven Microservices with Spring Cloud Stream
Stars: ✭ 58 (-88.72%)
Mutual labels:  event-driven, kafka, rabbitmq
Watermill
Building event-driven applications the easy way in Go.
Stars: ✭ 3,504 (+581.71%)
Mutual labels:  event-driven, kafka, rabbitmq
Eventeum
A resilient Ethereum event listener that bridges your smart contract events and backend microservices
Stars: ✭ 272 (-47.08%)
Mutual labels:  event-driven, kafka
Surging
Surging is a micro-service engine that provides a lightweight, high-performance, modular RPC request pipeline. The service engine supports http, TCP, WS,Grpc, Thrift,Mqtt, UDP, and DNS protocols. It uses ZooKeeper and Consul as a registry, and integrates it. Hash, random, polling, Fair Polling as a load balancing algorithm, built-in service gove…
Stars: ✭ 3,088 (+500.78%)
Mutual labels:  kafka, rabbitmq
Trubka
A CLI tool for Kafka
Stars: ✭ 296 (-42.41%)
Mutual labels:  protobuf, kafka
Watchman
A simple message queue callback center
Stars: ✭ 271 (-47.28%)
Mutual labels:  rabbitmq, message-queue
Full Stack Notes
全栈工程师手册
Stars: ✭ 366 (-28.79%)
Mutual labels:  kafka, rabbitmq
rails-microservices-book
A guide to building distributed Ruby on Rails applications using Protocol Buffers, NATS and RabbitMQ
Stars: ✭ 23 (-95.53%)
Mutual labels:  protobuf, rabbitmq
Rebus.RabbitMq
🚌 RabbitMQ transport for Rebus
Stars: ✭ 51 (-90.08%)
Mutual labels:  rabbitmq, message-queue
Message Io
Event-driven message library for building network applications easy and fast.
Stars: ✭ 321 (-37.55%)
Mutual labels:  event-driven, message-queue
Cap
Distributed transaction solution in micro-service base on eventually consistency, also an eventbus with Outbox pattern
Stars: ✭ 5,208 (+913.23%)
Mutual labels:  kafka, rabbitmq
Springboot Learning
基于Gradle构建,使用SpringBoot在各个场景的应用,包括集成消息中间件、前后端分离、数据库、缓存、分布式锁、分布式事务等
Stars: ✭ 340 (-33.85%)
Mutual labels:  kafka, rabbitmq
Spring Samples For All
spring、spring-boot、spring-cloud 常用整合用例
Stars: ✭ 401 (-21.98%)
Mutual labels:  kafka, rabbitmq
Gnomock
Test your code without writing mocks with ephemeral Docker containers 📦 Setup popular services with just a couple lines of code ⏱️ No bash, no yaml, only code 💻
Stars: ✭ 398 (-22.57%)
Mutual labels:  kafka, rabbitmq

plumber

Master build status Go Report Card

plumber is a CLI devtool for inspecting, piping, massaging and redirecting data in message systems like Kafka, RabbitMQ , GCP PubSub and many more. [1]

The tool enables you to:

  • See what's passing through your message systems
  • Pipe data from one place to another
  • Decode protobuf data in real-time
  • Capture and relay data to Batch platform

[1] It's like curl for messaging systems.

Why do you need it?

Messaging systems are black boxes - gaining visibility into what is passing through them is an involved process that requires you to write consumer code that you will likely throw away.

plumber enables you to stop wasting time writing throw-away code - use it to look into your queues, use it to connect disparate systems together or use it for debugging your event driven systems.

Demo

Brief Demo

Install

Via brew

$ brew tap batchcorp/public
$ brew install plumber

Manually

Plumber is a single binary, to install you simply need to download it, give it executable permissions and call it from your shell. Here's an example set of commands to do this:

$ curl -L -o plumber https://github.com/batchcorp/plumber/releases/latest/download/plumber-darwin
$ chmod +x plumber
$ mv plumber /usr/local/bin/plumber

Usage

Keep it simple: Read & write messages

$ plumber read kafka --topic orders --address="some-machine.domain.com:9092" --line-numbers --follow
1: {"sample" : "message 1"}
2: {"sample" : "message 2"}
3: {"sample" : "message 3"}
4: {"sample" : "message 4"}
5: {"sample" : "message 5"}
6: {"sample" : "message 6"}
7: {"sample" : "message 7"}
8: {"sample" : "message 8"}
9: {"sample" : "message 9"}
10: {"sample" : "message 10"}
11: {"sample" : "message 11"}
^C

$ plumber write kafka --address="some-machine.domain.com:9092" --topic orders --input-data "plain text"
Success! Wrote '1' message(s) to 'localhost:9092'.

NOTE: If you want to write JSON either surround the input-data in single quotes or use input-file.

See EXAMPLES.md for more usage examples

See ENV.md for list of supported environment variables

Getting Help

A full list of available flags can be displayed by using the --help flag after different parts of the command:

$ plumber read message rabbit --help
$ plumber read message mqtt --help
$ plumber write message kafka --help
$ plumber relay --help

Features

  • Dynamic protobuf & avro encode & decode
  • Gzip compress & decompress
  • --follow support (ie. tail -f)
  • Observe, relay and archive messaging data
  • Support for most messaging systems
  • Single-binary, zero-config, easy-install

Hmm, what is this Batch thing?

We are distributed system enthusiasts that started a company called Batch. We focus on improving workflows that involve messaging systems - specifically, we enable message observability, backups and outage recovery via message replays.

While working on our company, we built a tool for reading and writing messages from our message systems and realized that there is a serious lack of tooling in this space.

We wanted a swiss army knife type of tool for working with messaging systems (we use Kafka and RabbitMQ internally), so we created plumber.

Why the name plumber?

We consider ourselves "internet plumbers" of sort - so the name seemed to fit :)

Supported Messaging Systems

  • Kafka
  • RabbitMQ
  • Google Cloud Platform PubSub
  • MQTT
  • Amazon SQS
  • Amazon SNS (Publishing)
  • ActiveMQ
  • Azure Service Bus
  • NATS
  • Redis

NOTE: If your messaging tech is not supported - submit an issue and we'll do our best to make it happen!

High Availability

When running plumber in relay mode in production, you will want to run at least 2 instances of plumber - that way updates, maintenances or unexpected problems will not interfere with data collection.

You can achieve H/A by launching 2+ instances of plumber with identical configurations.

Kafka

You need to ensure that you are using the same consumer group on all plumber instances.

RabbitMQ

Make sure that all instances of plumber are pointed to the same queue.

Note on boolean flags

In order to flip a boolean flag to false, prepend --no to the flag.

ie. --queue-declare is true by default. To make it false, use --no-queue-declare.

Acknowledgments

Huge shoutout to jhump and for his excellent protoreflect library, without which plumber would not be anywhere near as easy to implement. Thank you!

Contribute

We love contributions! Prior to sending us a PR, open an issue to discuss what you intend to work on. When ready to open PR - add good tests and let's get this thing merged!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].