Confluent Kafka Golang Client VS jemalloc

Compare Confluent Kafka Golang Client vs jemalloc and see what are their differences.

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
Confluent Kafka Golang Client jemalloc
12 34
4,403 9,011
1.3% 1.1%
8.1 8.3
6 days ago 7 days ago
Go C
Apache License 2.0 GNU General Public License v3.0 or later
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

Confluent Kafka Golang Client

Posts with mentions or reviews of Confluent Kafka Golang Client. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-06-04.
  • book about golang and kafka
    6 projects | /r/golang | 4 Jun 2023
    There are two main libraries that people use to write clients Confluent Kafka and segment io kafka
  • Getting sum type values from a map
    2 projects | /r/vlang | 14 Nov 2022
    As my first "real world" (ish) project in Vlang, I'm trying to copy https://github.com/confluentinc/confluent-kafka-go, which is a Go wrapper for Kafka C client library, https://github.com/edenhill/librdkafka
  • Fix it, Fork it, Fuck off
    4 projects | news.ycombinator.com | 25 Aug 2022
    You are right, but in practice that's not what happens. Companies do not rely on open source libraries, the developers working for such companies do.

    I can give you a realistic example. If you want to use Kafka and Go, your probably only option is to use https://github.com/confluentinc/confluent-kafka-go. Its LICENSE explicitly says "no warranty". Now, what if I find a bug in the library? Only two realistic solutions from my side:

    1. I submit the issue and hope for the maintainers to fix it

    2. I dig deeper and try to fix the issue. I submit the PR

    None of the above scenarios are guaranteed to have a happy ending. The issue could be ignored, or piled up among thousand of other (maybe higher prio) issues. My solution may not be optimal and could be rejected (or if it's optimal, nobody is taking a look at it, and it could remain open for weeks/months).

    > If that is a problem for you, negotiate a different contract up front - with the maintainer or someone else willing to do the work. That probably means paying them.

    In the real world that would mean that I go to my manager and asks them to pay money to the maintainers of confluent-kafka-go to fix the issue I found. I don't think my manager would approve that, but let's imagine he does. The guys at confluent-kafka-go may not want money to fix the issue. These guys have probably already jobs that pay them well, and they work on the library at will.

    Note: I'm talking about confluent-kafka-go, which I know is behind the Confluent software company. But I could as well be talking about libraries maintained by individuals like https://github.com/edenhill/librdkafka

  • What are Golang competitors in 2022 when it comes to one-file binary deployment?
    4 projects | /r/golang | 11 Jul 2022
    it can be completely statically linked binaries. example: https://github.com/confluentinc/confluent-kafka-go/blob/db57ef6235/kafka/librdkafka_vendor/README.md
  • Benthos - Fancy stream processing made operationally mundane
    4 projects | /r/dataengineering | 8 Jun 2022
    If you find the kafka input slow, try kafka_franz. It might be a bit faster, since it’s based on https://github.com/twmb/franz-go. The kafka one is based on https://github.com/Shopify/sarama. You can also write a custom input based on https://github.com/confluentinc/confluent-kafka-go, but this library relies on CGo, which can be annoying.
  • Hunting down a C memory leak in a Go program
    8 projects | news.ycombinator.com | 15 Oct 2021
    So, in the interests of full transparency - we at Zendesk are actually running a fork of confluent-kafka-go, which I forked to add, amongst other things, context support: https://github.com/confluentinc/confluent-kafka-go/pull/626

    This bug actually happened because I mis-merged upstream into our fork and missed an important call to rd_kafka_poll_set_consumer: https://github.com/zendesk/confluent-kafka-go/commit/6e2d889...

  • Create page view analytics system using Kafka, Go, Postgres & GraphQL in 5 steps
    4 projects | dev.to | 11 Aug 2021
    Setup Kafka Producer using confluent-kakfka-go
  • Is segmentio/kafka-go production ready ?
    3 projects | /r/golang | 1 Jun 2021
    I'd suggest https://github.com/confluentinc/confluent-kafka-go we switched from sarama-cluster with minimal work and it works fine. And we process approx 1.2M messages per hour.
    3 projects | /r/golang | 1 Jun 2021
    You should give confluent-kafka-go a try. It has a sync producer and is super fast. Have been using from quite a few years now.
  • Go and Kafka
    2 projects | /r/golang | 26 Apr 2021
    In my company we use this https://github.com/confluentinc/confluent-kafka-go,

jemalloc

Posts with mentions or reviews of jemalloc. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-04-09.
  • Show HN: Comprehensive inter-process communication (IPC) toolkit in modern C++
    2 projects | news.ycombinator.com | 9 Apr 2024
    - Split-up a certain important C++ service into several parts, for various reasons, without adding latency to the request path.

    The latter task meant, among other things, communicating large amounts of user data from server application to server application. capnp-encoded structures (sometimes big - but not necessarily) would also need to be transmitted; as would FDs.

    The technical answers to these challenges are not necessarily rocket science. FDs can be transmitted via Unix domain socket as "ancillary data"; the POSIX `sendmsg()` API is hairy but usable. Small messages can be transmitted via Unix domain socket, or pipe, or POSIX MQ (etc.). Large blobs of data it would not be okay to transmit via those transports, as too much copying into and out of kernel buffers is involved and would add major latency, so we'd have to use shared memory (SHM). Certainly a hairy technology... but again, doable. And as for capnp - well - you "just" code a `MessageBuilder` implementation that allocates segments in SHM instead of regular heap like `capnp::MallocMessageBuilder` does.

    Thing is, I noticed that various parts of the company had similar needs. I've observed some variation of each of the aforementioned tasks custom-implemented - again, and again, and again. None of these implementations could really be reused anywhere else. Most of them ran into the same problems - none of which is that big a deal on its own, but together (and across projects) it more than adds up. To coders it's annoying. And to the business, it's expensive!

    Plus, at least one thing actually proved to be technically quite hard. Sharing (via SHM) a native C++ structure involving STL containers and/or raw pointers: downright tough to achieve in a general way. At least with Boost.interprocess (https://www.boost.org/doc/libs/1_84_0/doc/html/interprocess....) - which is really quite thoughtful - one can accomplish a lot... but even then, there are key limitations, in terms of safety and ease of use/reusability. (I'm being a bit vague here... trying to keep the length under control.)

    So, I decided to not just design/code an "IPC thing" for that original key C++ service I was being asked to split... but rather one that could be used as a general toolkit, for any C++ applications. Originally we named it Akamai-IPC, then renamed it Flow-IPC.

    As a result of that origin story, Flow-IPC is... hmmm... meat-and-potatoes, pragmatic. It is not a "framework." It does not replace or compete with gRPC. (It can, instead, speed RPC frameworks up by providing the zero-copy transmission substrate.) I hope that it is neither niche nor high-maintenance.

    To wit: If you merely want to send some binary-blob messages and/or FDs, it'll do that - and make it easier by letting you set-up a single session between the 2 processes, instead of making you worry about socket names and cleanup. (But, that's optional! If you simply want to set up a Unix domain socket yourself, you can.) If you want to add structured messaging, it supports Cap'n Proto - as noted - and right out of the box it'll be zero-copy end-to-end. That is, it'll do all the SHM stuff without a single `shm_open()` or `mmap()` or `ftruncate()` on your part. And if you want to customize how that all works, those layers and concepts are formally available to you. (No need to modify Flow-IPC yourself: just implement certain concepts and plug them in, at compile-time.)

    Lastly, for those who want to work with native C++ data directly in SHM, it'll simplify setup/cleanup considerably compared to what's typical. For the original Akamai service in question, we needed to use SHM as intensively as one typically uses the regular heap. So in particular Boost.interprocess's built-in 2 SHM-allocation algorithms were not sufficient. We needed something more industrial-strength. So we adapted jemalloc (https://jemalloc.net/) to work in SHM, and worked that into Flow-IPC as a standard available feature. (jemalloc powers FreeBSD and big parts of Meta.) So jemalloc's anti-fragmentation algorithms, thread caching - all that stuff - will work for our SHM allocations.

    Having accepted this basic plan - develop a reusable IPC library that handled the above oft-repeated needs - Eddy Chan joined and especially heavily contributed on the jemalloc aspects. A couple years later we had it ready for internal Akamai use. All throughout we kept it general - not Akamai-specific (and certainly not specific to that original C++ service that started it all off) - and personally I felt it was a very natural candidate for open-source.

    To my delight, once I announced it internally, the immediate reaction from higher-up was, "you should open-source it." Not only that, we were given the resources and goodwill to actually do it. I have learned that it's not easy to make something like this presentable publicly, even having developed it with that in mind. (BTW it is about 69k lines of code, 92k lines of comments, excluding the Manual.)

    So, that's what happened. We wrote a thing useful for various teams internally at Akamai - and then Akamai decided we should share it with the world. That's how open-source thrives, we figured.

    On a personal level, of course it would be gratifying if others found it useful and/or themselves contributed. What a cool feeling that would be! After working with exemplary open-source stuff like capnp, it'd be amazing to offer even a fraction of that usefulness. But, we don't gain from "market share." It really is just there to be useful. So we hope it is!

  • Speed of Rust vs. C
    2 projects | news.ycombinator.com | 23 Feb 2024
    The worst memory performance bug I ever saw turned out to be heap fragmentation in a non-GC system. There are memory allocators that solve this like https://github.com/jemalloc/jemalloc/tree/dev but ... they do it by effectively running a GC at the block level

    As soon as you use atomic counters in a multi-threaded system you can wave goodbye to your scalability too!

  • Understanding Mesh Allocator
    2 projects | news.ycombinator.com | 26 Jan 2024
    The linked talk video mentioned they're playing with it in jemalloc and tcmalloc.

    I found this https://github.com/jemalloc/jemalloc/issues/1440 but couldn't find tcmalloc doing similar.

    These guys are aware of mesh and compare against it: https://abelay.github.io/6828seminar/papers/maas:llama.pdf

  • Atomics and Concurrency
    3 projects | news.ycombinator.com | 12 Jan 2024
    I think that the point rather was not to use any allocation in critical sections since allocator implementations are not lock-free or wait-free.

    https://github.com/jemalloc/jemalloc/blob/dev/src/mutex.c

  • Rust std:fs slower than Python
    7 projects | news.ycombinator.com | 29 Nov 2023
    Be aware `jemalloc` will make you suffer the observability issues of `MADV_FREE`. `htop` will no longer show the truth about how much memory is in use.

    * https://github.com/jemalloc/jemalloc/issues/387#issuecomment...

    * https://gitlab.haskell.org/ghc/ghc/-/issues/17411

    Apparently now `jemalloc` will call `MADV_DONTNEED` 10 seconds after `MADV_FREE`:

  • Google's OSS-Fuzz expands fuzz-reward program to $30000
    3 projects | news.ycombinator.com | 2 Feb 2023
    https://github.com/jemalloc/jemalloc/issues/2222

    Strangely, these bugs were found by the CI of ClickHouse, and not by any of the hundreds of other products using these libraries.

  • Permission issue: paperless-ngx docker setup
    2 projects | /r/synology | 24 Jan 2023
    1:M 24 Jan 2023 15:29:45.759 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 1:M 24 Jan 2023 15:29:45.759 # Server initialized 1:M 24 Jan 2023 15:29:45.759 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 1:M 24 Jan 2023 15:29:45.759 * Running mode=standalone, port=6379. 1:M 24 Jan 2023 15:29:45.759 * monotonic clock: POSIX clock_gettime 1:C 24 Jan 2023 15:29:45.758 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf 1:C 24 Jan 2023 15:29:45.758 # Redis version=7.0.8, bits=64, commit=00000000, modified=0, pid=1, just started
  • Ruby 3.2.0 preview performances
    2 projects | /r/ruby | 15 Nov 2022
    If possible can you downgrade to that version and retest? You may have to manually compile it yourself from here.
  • Troubleshooting ruby build
    3 projects | dev.to | 10 Oct 2022
    To enable Jemalloc we need to do next before ruby installation:
  • How to create small Docker images for Rust
    5 projects | dev.to | 5 Oct 2022
    This is why we used jemalloc, a memory allocator designed for highly concurrent applications.

What are some alternatives?

When comparing Confluent Kafka Golang Client and jemalloc you can also consider the following projects:

sarama - Sarama is a Go library for Apache Kafka. [Moved to: https://github.com/IBM/sarama]

mimalloc - mimalloc is a compact general purpose allocator with excellent performance.

kafka-go - Kafka library in Go

Centrifugo - Scalable real-time messaging server in a language-agnostic way. Self-hosted alternative to Pubnub, Pusher, Ably. Set up once and forever.

goka - Goka is a compact yet powerful distributed stream processing library for Apache Kafka written in Go.

Benthos - Fancy stream processing made operationally mundane

tbb - oneAPI Threading Building Blocks (oneTBB) [Moved to: https://github.com/oneapi-src/oneTBB]

rust-scudo

confluent-kafka-python - Confluent's Kafka Python Client

NATS - Golang client for NATS, the cloud native messaging system.

rpmalloc - Public domain cross platform lock free thread caching 16-byte aligned memory allocator implemented in C

machinery - Machinery is an asynchronous task queue/job queue based on distributed message passing.