bsideup / Liiklus
Licence: mit
Reactive (RSocket/gRPC) Gateway for the event-based systems
Stars: ✭ 192
Programming Languages
java
68154 projects - #9 most used programming language
Projects that are alternatives of or similar to Liiklus
Pos
Sample Application DDD, Reactive Microservices, CQRS Event Sourcing Powered by DERMAYON LIBRARY
Stars: ✭ 207 (+7.81%)
Mutual labels: reactive, kafka, cqrs
Aecor
Pure functional event sourcing runtime
Stars: ✭ 299 (+55.73%)
Mutual labels: reactive, eventsourcing, cqrs
Watermill
Building event-driven applications the easy way in Go.
Stars: ✭ 3,504 (+1725%)
Mutual labels: reactive, kafka, cqrs
Practical.cleanarchitecture
Asp.Net Core 5 Clean Architecture (Microservices, Modular Monolith, Monolith) samples (+Blazor, Angular 11, React 17, Vue 2.6), Domain-Driven Design, CQRS, Event Sourcing, SOLID, Asp.Net Core Identity Custom Storage, Identity Server 4 Admin UI, Entity Framework Core, Selenium E2E Testing, SignalR Notification, Hangfire Tasks Scheduling, Health Checks, Security Headers, ...
Stars: ✭ 639 (+232.81%)
Mutual labels: grpc, kafka, cqrs
delta
DDD-centric event-sourcing library for the JVM
Stars: ✭ 15 (-92.19%)
Mutual labels: reactive, cqrs, eventsourcing
Jdonframework
Domain-Driven-Design Pub/Sub Domain-Events framework
Stars: ✭ 978 (+409.38%)
Mutual labels: reactive, eventsourcing, cqrs
Quiz
Example real time quiz application with .NET Core, React, DDD, Event Sourcing, Docker and built-in infrastructure for CI/CD with k8s, jenkins and helm
Stars: ✭ 100 (-47.92%)
Mutual labels: eventsourcing, cqrs
Bifrost
This is the stable release of Dolittle till its out of alpha->beta stages
Stars: ✭ 111 (-42.19%)
Mutual labels: eventsourcing, cqrs
Mmo Server
Distributed Java game server, including login, gateway, game demo
Stars: ✭ 114 (-40.62%)
Mutual labels: grpc, kafka
Library
A microservice project using .NET Core 2.0, DDD, CQRS, Event Sourcing, Redis and RabbitMQ
Stars: ✭ 122 (-36.46%)
Mutual labels: eventsourcing, cqrs
Thingsboard
Open-source IoT Platform - Device management, data collection, processing and visualization.
Stars: ✭ 10,526 (+5382.29%)
Mutual labels: grpc, kafka
Spec
The AsyncAPI specification allows you to create machine-readable definitions of your asynchronous APIs.
Stars: ✭ 1,860 (+868.75%)
Mutual labels: reactive, kafka
Eshoponcontainersddd
Fork of dotnet-architecture/eShopOnContainers in full DDD/CQRS design using my own patterns
Stars: ✭ 126 (-34.37%)
Mutual labels: eventsourcing, cqrs
Alpakka Kafka
Alpakka Kafka connector - Alpakka is a Reactive Enterprise Integration library for Java and Scala, based on Reactive Streams and Akka.
Stars: ✭ 1,295 (+574.48%)
Mutual labels: reactive, kafka
Filodb
Distributed Prometheus time series database
Stars: ✭ 1,286 (+569.79%)
Mutual labels: reactive, kafka
Ultimate Go
This repo contains my notes on working with Go and computer systems.
Stars: ✭ 1,530 (+696.88%)
Mutual labels: grpc, kafka
Event Sourcing Castanha
An Event Sourcing service template with DDD, TDD and SOLID. It has High Cohesion and Loose Coupling, it's a good start for your next Microservice application.
Stars: ✭ 68 (-64.58%)
Mutual labels: kafka, cqrs
Sephsplace
My own version of r/place, done in a weekend
Stars: ✭ 119 (-38.02%)
Mutual labels: kafka, cqrs
Todomvc Ddd Cqrs Eventsourcing
Implementation of basic Todo app via tastejs/todomvc in C#/Typescript with eventsourcing, cqrs, and domain driven design
Stars: ✭ 134 (-30.21%)
Mutual labels: eventsourcing, cqrs
Liiklus
Liiklus [li:klus] ("traffic" in Estonian) - RSocket/gRPC-based Gateway for the event-based systems from the ones who think that Kafka is too low-level.
Why
- horizontally scalable RSocket/gRPC streaming gateway
- supports as many client languages as RSocket+gRPC do (Java, Go, C++, Python, etc...)
- reactive first
- Per-partition backpressure-aware sources
- at-least-once/at-most-once delivery guarantees
- pluggable event storage (Kafka, Pulsar, Kinesis, etc...)
- pluggable positions storage (DynamoDB, Cassandra, Redis, etc...)
- WIP: cold event storage support (S3, Minio, SQL, key/value, etc...)
Who is using
- https://vivy.com/ - 25+ microservices, an abstraction in front of Kafka for the Shared Log Infrastructure (Event Sourcing / CQRS)
Quick Start
The easiest (and recommended) way to run Liiklus is with Docker:
$ docker run \
-e kafka_bootstrapServers=some.kafka.host:9092 \
-e storage_positions_type=MEMORY \ # only for testing, DO NOT use in production
-p 6565:6565 \
bsideup/liiklus:$LATEST_VERSION
Now use LiiklusService.proto to generate your client.
The clients must implement the following algorithm:
- Subscribe to the assignments:
stub.subscribe(SubscribeRequest( topic="your-topic", group="your-consumer-group", [autoOffsetReset="earliest|latest"] ))
- For every emitted reply of
Subscribe
, using the same channel, subscribe to the records:stub.receive(ReceiveRequest( assignment=reply.getAssignment() ))
- ACK records
Note 1: If you ACK record before processing it you get at-most-once, after processing - at-least-oncestub.ack(AckRequest( assignment=reply.getAssignment(), offset=record.getOffset() ))
Note 2: It's recommended to ACK every n-th record, or every n seconds to reduce the load on the positions storage
Java example:
Example code using Project Reactor and reactive-grpc:
var stub = ReactorLiiklusServiceGrpc.newReactorStub(channel);
stub
.subscribe(
SubscribeRequest.newBuilder()
.setTopic("user-events")
.setGroup("analytics")
.setAutoOffsetReset(AutoOffsetReset.EARLIEST)
.build()
)
.flatMap(reply -> stub
.receive(ReceiveRequest.newBuilder().setAssignment(reply.getAssignment()).build())
.window(1000) // ACK every 1000th records
.concatMap(
batch -> batch
.map(ReceiveReply::getRecord)
// TODO process instead of Mono.delay(), i.e. by indexing to ElasticSearch
.concatMap(record -> Mono.delay(Duration.ofMillis(100)))
.sample(Duration.ofSeconds(5)) // ACK every 5 seconds
.onBackpressureLatest()
.delayUntil(record -> stub.ack(
AckRequest.newBuilder()
.setAssignment(reply.getAssignment())
.setOffset(record.getOffset())
.build()
)),
1
)
)
.blockLast()
Also check examples/java/ for a complete example
Configuration
The project is based on Spring Boot and uses it's configuration system
Please check application.yml for the available configuration keys.
License
See LICENSE.
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].