All Projects → line → Decaton

line / Decaton

Licence: apache-2.0
High throughput asynchronous task processing on Apache Kafka

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Decaton

Trubka
A CLI tool for Kafka
Stars: ✭ 296 (+58.29%)
Mutual labels:  kafka, kafka-consumer
Librdkafka
The Apache Kafka C/C++ library
Stars: ✭ 5,617 (+2903.74%)
Mutual labels:  kafka, kafka-consumer
Kafka Webview
Full-featured web-based Apache Kafka consumer UI
Stars: ✭ 319 (+70.59%)
Mutual labels:  kafka, kafka-consumer
Qbusbridge
The Apache Kafka Client SDK
Stars: ✭ 272 (+45.45%)
Mutual labels:  kafka, kafka-consumer
Kafka Php
kafka php client
Stars: ✭ 1,340 (+616.58%)
Mutual labels:  kafka, kafka-consumer
Racecar
Racecar: a simple framework for Kafka consumers in Ruby
Stars: ✭ 327 (+74.87%)
Mutual labels:  kafka, kafka-consumer
Kq
Kafka-based Job Queue for Python
Stars: ✭ 530 (+183.42%)
Mutual labels:  kafka, kafka-consumer
Rafka
Kafka proxy with a simple API, speaking the Redis protocol
Stars: ✭ 49 (-73.8%)
Mutual labels:  kafka, kafka-consumer
Karafka
Framework for Apache Kafka based Ruby and Rails applications development.
Stars: ✭ 1,223 (+554.01%)
Mutual labels:  kafka, kafka-consumer
Kattlo Cli
Kattlo CLI Project
Stars: ✭ 58 (-68.98%)
Mutual labels:  kafka, kafka-consumer
Strimzi Kafka Bridge
Apache Kafka bridge
Stars: ✭ 137 (-26.74%)
Mutual labels:  kafka, kafka-consumer
Kukulcan
A REPL for Apache Kafka
Stars: ✭ 103 (-44.92%)
Mutual labels:  kafka, kafka-consumer
Parallel Consumer
Parallel Apache Kafka client wrapper with client side queueing, a simpler consumer/producer API with key concurrency and extendable non-blocking IO processing.
Stars: ✭ 154 (-17.65%)
Mutual labels:  kafka, kafka-consumer
Spark Kafka Writer
Write your Spark data to Kafka seamlessly
Stars: ✭ 175 (-6.42%)
Mutual labels:  kafka
Spark Streaming With Kafka
Self-contained examples of Apache Spark streaming integrated with Apache Kafka.
Stars: ✭ 180 (-3.74%)
Mutual labels:  kafka
Fero
light, fast, scalable, streaming microservices made easy
Stars: ✭ 175 (-6.42%)
Mutual labels:  kafka
Operators
Collection of Kubernetes Operators built with KUDO.
Stars: ✭ 175 (-6.42%)
Mutual labels:  kafka
Mockedstreams
Scala DSL for Unit-Testing Processing Topologies in Kafka Streams
Stars: ✭ 184 (-1.6%)
Mutual labels:  kafka
Seconds Kill
基于 Springboot + Redis + Kafka 的秒杀系统,乐观锁 + 缓存 + 限流 + 异步,TPS 从 500 优化到 3000
Stars: ✭ 180 (-3.74%)
Mutual labels:  kafka
Sdk Java
Java SDK for CloudEvents
Stars: ✭ 173 (-7.49%)
Mutual labels:  kafka

Decaton

Build Status

Decaton is a streaming task processing framework built on top of Apache Kafka. It is designed to enable "concurrent processing of records consumed from one partition" which isn't possible in many Kafka consumer frameworks.

Here is the list of property that Decaton enables by default:

  • Concurrent (either multi-threaded or asynchronous) processing of records consumed from one partition
  • Preserve ordering guarantee by record keys
  • Preserve At-least-once delivery semantics no matter in which order does records gets processed

Decaton is a library rather than a full-stack execution environment so you can easily integrate it into your existing/new JVM applications just by adding few lines of artifact dependencies.

Since it has been designed, optimized and being used for LINE's server system which produces over 1 million, I/O intensive tasks per second for each stream, its internal implementation for enabling concurrent processing of records is highly optimized and can produce ideal throughput with minimal count of servers, maximizing their resource utilization.

Getting Started / Tutorial

Please see Getting Started

When to use (and when to not)

It's good idea to use Decaton when you have requirement for high-throughput and/or low-latency processing capability with your processing logic containing I/O access against external systems (e.g, DB access, Web API access) which tends to apply certain processing latency in each tasks.

It would be better idea to look for other frameworks like Kafka Streams when you need to do complex stream processing/aggregation such as streams join, windowed processing without needing to access external storage/web APIs.

Minimum dependencies

Below is the minimum dependencies to add Decaton artifacts into your Gradle project. It's for people who prefers to try the APIs first by adding it into your project, please see Getting Started for the detailed explanation and proper use of it.

// For task producers
implementation "com.linecorp.decaton:decaton-common:$DECATON_VERSION"
implementation "com.linecorp.decaton:decaton-client:$DECATON_VERSION"
// For processors
implementation "com.linecorp.decaton:decaton-common:$DECATON_VERSION"
implementation "com.linecorp.decaton:decaton-processor:$DECATON_VERSION"

Features

The core feature of Decaton is support for concurrent processing of records consumed from one partition. See Why Decaton part of document for the detail.

Besides that, it got a lot of unique and useful features through its adoption spread for many services at LINE which are all came out of real needs for building services. Below are some examples. See Index for the full list.

  • Retry Queuing - Retry a failed task with back-off without blocking other tasks flow
  • Dynamic Rate Limiting - Apply and update processing rate quota dynamically
  • Task Compaction - Crush preceding tasks which its processing results will be overwritten by following task

Performance

High performance is one of the biggest functionalities of Decaton so we're carefully tracking its performance transitions commit-by-commit. You can see performance tracking dashboard from here (Note that the actual performance could be more or less depending on machine resource and configuration).

How to build

We use Gradle to build this project.

./gradlew build

How to contribute

See CONTRIBUTING.md.

If you believe you have discovered a vulnerability or have an issue related to security, please contact the maintainer directly or send us a email to [email protected] before sending a pull request.

License

Copyright 2020 LINE Corporation

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

See LICENSE for more detail.

Contributor Credit

Below people made great contributions to this project in early days but their name doesn't appear in commit history because we had to erase commit logs when open-sourcing it by security reasons. Thank you so much for your contributions!

Haruki Okada, Wonpill Seo, Szuyung Wang, Vincent Pericart, Ryosuke Hasebe, Maytee Chinavanichkit, Junpei Koyama, Yusuke Imai, Alex Moreno

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].