appendix C Comparing Fluent Bit and Fluentd

 

This appendix highlights the differences between Fluent Bit and Fluentd. Fluent Bit is far more than a simple reimplementation of Fluentd using C. Although the goals and ideas at the heart of both solutions are essentially the same, there are also many differences. Some differences are subtle but important, such as the YAML Ain’t Markup Language (YAML) configuration structure, and others are minor, such as additional attributes for a plugin. They are noticeable in other areas, such as how custom plugins can be built.

We’re not going to describe the Fluentd features here beyond naming them. If you want more in-depth understanding of how the Fluentd features work, we recommend reading Logging in Action.

C.1 Technology differences

Chapter 1, and to some extent chapter 2, looked at the implementation and deployment differences between Fluentd and Fluent Bit. We’ll summarize them in bullet points rather than repeat the details:

  • Implementation technologies, with Fluent Bit using C and supporting extensions with C, Go, Lua, and WebAssembly (WASM), compared with Ruby for Fluentd
  • Smaller, more compact, platform-native binary for Fluent Bit and a platform-agnostic runtime for Fluentd
  • A basic management UI in Fluentd if needed; no such capability in Fluent Bit
  • Support for HTTP/2 (introduced in Fluent Bit v3); no use of HTTP/2 in Fluentd yet

C.2 Configuration capabilities

C.3 Inputs and outputs

C.3.1 Support for logging frameworks

C.3.2 Plugin choice

C.3.3 Secondary/fallback output options

C.3.4 OpenTelemetry

C.3.5 Customization with embedded code

C.4 Routing

C.5 Buffering and internal data structure

C.6 Streaming processing

C.7 Conclusion