Commit Graph

197 Commits

Author SHA1 Message Date
Vincent Bernat
f9eee6f509 conntrackfixer: removal of the service
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
Update Nix dependency hashes / Update dependency hashes (push) Has been cancelled
This is not needed anymore since Docker Engine v23. This version is
unmaintained since May 2025 (not that old).

See:
- https://github.com/moby/moby/pull/44752
- https://github.com/moby/moby/pull/44742

Fix #2153 (in a way)
2025-12-08 15:05:56 +01:00
Vincent Bernat
542bd87ba0 build: don't repeat dependency on go.mod for everything 2025-12-06 09:31:45 +01:00
Vincent Bernat
11f878ca21 inlet/kafka: make Kafka load-balancing algorithm configurable
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
Update Nix dependency hashes / Update dependency hashes (push) Has been cancelled
And use random by default. This scales better. And even when not using
multiple outlets, there is little drawback to pin an exporter to a
partition.
2025-11-25 22:42:33 +01:00
Vincent Bernat
5ae5d96643 build: disable tracing support for gRPC
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
Update Nix dependency hashes / Update dependency hashes (push) Has been cancelled
The goal is to be able to reenable full dead code elimination that is
prevented by non-constant calls to reflect.MethodByName(). There are
many other culprits for this:

```
 08:04 ❱ go  build -o /dev/null -tags release,grpcnotrace -ldflags=-dumpdep  .  |& go run github.com/aarzilli/whydeadcode@latest
github.com/go-playground/validator/v10.tryCallValidateFn reachable from:
         github.com/go-playground/validator/v10.isValidateFn
         github.com/go-playground/validator/v10.isValidateFn·f
         github.com/go-playground/validator/v10.map.init.11
         github.com/go-playground/validator/v10.bakedInValidators
         github.com/go-playground/validator/v10.New
         akvorado/common/helpers.init.1
         akvorado/common/helpers..inittask
         go:main.inittasks
         _

github.com/expr-lang/expr/builtin.get reachable from:
         github.com/expr-lang/expr/builtin.get·f
         github.com/expr-lang/expr/builtin..stmp_53
         github.com/expr-lang/expr/builtin..stmp_0
         github.com/expr-lang/expr/builtin.init
         github.com/expr-lang/expr/builtin..inittask
         go:main.inittasks
         _

github.com/expr-lang/expr/checker/nature.Nature.All reachable from:
         type:github.com/expr-lang/expr/checker/nature.Nature
         type:func() github.com/expr-lang/expr/checker/nature.Nature
         type:github.com/expr-lang/expr/ast.Node
         type:github.com/expr-lang/expr/vm.Program
         type:*github.com/expr-lang/expr/vm.Program
         type:akvorado/outlet/core.ExporterClassifierRule
         type:[]akvorado/outlet/core.ExporterClassifierRule
         type:akvorado/outlet/core.Configuration
         type:akvorado/cmd.OutletConfiguration
         type:[]akvorado/cmd.OutletConfiguration
         type:akvorado/cmd.OrchestratorConfiguration
         type:*akvorado/cmd.OrchestratorConfiguration
         internal/abi..dict.TypeFor[akvorado/cmd.OrchestratorConfiguration]
         reflect..dict.TypeFor[akvorado/cmd.OrchestratorConfiguration]
         akvorado/cmd.init.6.orchestratorClickHouseMigrationHook.func2
         akvorado/cmd.init.6.orchestratorClickHouseMigrationHook.func2·f
         akvorado/cmd.init.6
         akvorado/cmd..inittask
         go:main.inittasks
         _

text/template.(*state).evalField reachable from:
         text/template.(*state).evalFieldChain
         text/template.(*state).evalCommand
         text/template.(*state).evalPipeline
         text/template.(*state).walk
         text/template.(*Template).execute
         akvorado/console/authentication.(*Component).UserAuthentication.func1
         akvorado/console/authentication.(*Component).UserAuthentication
         type:*akvorado/console/authentication.Component
         akvorado/cmd.consoleStart
         akvorado/cmd.init.func3
         akvorado/cmd.init.func3·f
         akvorado/cmd..stmp_2
         akvorado/cmd.init
         akvorado/cmd..inittask
         go:main.inittasks
         _

gorm.io/gorm/schema.ParseWithSpecialTableName reachable from:
         gorm.io/gorm.(*DB).assignInterfacesToValue
         gorm.io/gorm.(*DB).FirstOrInit
         type:*gorm.io/gorm.DB
         type:akvorado/console/database.Component
         akvorado/cmd.consoleStart
         akvorado/cmd.init.func3
         akvorado/cmd.init.func3·f
         akvorado/cmd..stmp_2
         akvorado/cmd.init
         akvorado/cmd..inittask
         go:main.inittasks
         _

gorm.io/gorm/schema.ParseWithSpecialTableName reachable from:
         gorm.io/gorm.(*DB).assignInterfacesToValue
         gorm.io/gorm.(*DB).FirstOrInit
         type:*gorm.io/gorm.DB
         type:akvorado/console/database.Component
         type:*akvorado/console/database.Component
         akvorado/cmd.consoleStart
         akvorado/cmd.init.func3
         akvorado/cmd.init.func3·f
         akvorado/cmd..stmp_2
         akvorado/cmd.init
         akvorado/cmd..inittask
         go:main.inittasks
         _

github.com/expr-lang/expr/vm/runtime.FetchMethod reachable from:
         github.com/expr-lang/expr/vm.(*VM).Run
         github.com/expr-lang/expr/vm.Run
         akvorado/outlet/core.(*ExporterClassifierRule).exec
         akvorado/outlet/core.(*Component).classifyExporter
         akvorado/outlet/core.(*worker).enrichFlow
         akvorado/outlet/core.(*worker).processIncomingFlow.func1
         akvorado/outlet/core.(*worker).processIncomingFlow
         akvorado/outlet/core.(*worker).processIncomingFlow-fm
         akvorado/outlet/core.(*Component).newWorker
         akvorado/outlet/core.(*Component).newWorker-fm
         akvorado/outlet/core.(*Component).Start
         type:*akvorado/outlet/core.Component
         akvorado/cmd.outletStart
         akvorado/cmd.init.func7
         akvorado/cmd.init.func7·f
         akvorado/cmd..stmp_6
         akvorado/cmd.init
         akvorado/cmd..inittask
         go:main.inittasks
         _
```

For gorm, we have https://github.com/go-gorm/gorm/pull/7643. We could
replace text/template by something else as our usage is quite light. For
validator, it may be addressable upstream by disallowing calls to
configurable validator function through a tag. For expr, it looks more
complex.

Then, regression should be detected by CI.
2025-11-21 08:03:30 +01:00
Vincent Bernat
08b86db25d docker: ensure cleaner contexts for Docker builds
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
Build IPinfo geoipupdate image / Build Docker images (push) Has been cancelled
Update Nix dependency hashes / Update dependency hashes (push) Has been cancelled
`make docker` builds the context from a tarball. We don't use git
archive as we want to allow local modifications without committing them.
This is not unlike nix work.

For the other Docker files, use a tailored `.dockerignore`:

 - dev, ignore everything except bin/akvorado
 - ipinfo-geoipupdate, ignore everything except the update script
 - nix, let nix handle it from the Git repository
2025-11-19 20:41:47 +01:00
Vincent Bernat
20da0c1d2f build: also clean generated files for tests 2025-11-19 18:32:37 +01:00
Vincent Bernat
5e47cc9c24 build: always pull Docker images when building
This prevents usage of outdated images.
2025-11-19 17:54:42 +01:00
Vincent Bernat
44b37e8a82 build: format a bit the list of tools
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
Update Nix dependency hashes / Update dependency hashes (push) Has been cancelled
Update Go toolchain / Update Go toolchain (push) Has been cancelled
Update Nix flake.lock / Update Nix lockfile (asn2org) (push) Has been cancelled
Update Nix flake.lock / Update Nix lockfile (iana-assignments) (push) Has been cancelled
Update Nix flake.lock / Update Nix lockfile (nixpkgs) (push) Has been cancelled
2025-11-15 15:55:33 +01:00
Vincent Bernat
674192d652 build: rename buf.gen.yaml to .buf.gen.yaml
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
2025-11-15 10:57:05 +01:00
Vincent Bernat
7b272fc965 build: rename revive.toml to .revive.toml 2025-11-15 10:57:05 +01:00
Vincent Bernat
7bfd14e444 build: enforce use of the same toolchain for external tools 2025-11-15 07:35:21 +01:00
Vincent Bernat
7f5950f89c build: add more linting rules with revive 2025-11-12 22:37:44 +01:00
Vincent Bernat
43ae8c8f35 build: ship eBPF programs for people without clang
Notably, in GitHub actions, MacOS does not have ebpf support compiled
in.
2025-10-28 09:45:51 +01:00
Vincent Bernat
1fdf0c3f9f inlet/flow: use eBPF for per-packet load-balancing of incoming flows
By default, the 5-tuple is used to load balance flows. Exporters with
many flows are bound to a specific worker. Use eBPF to do a per-packet
load-balancing.

Currently, this is done randomly, but we will use a percpu counter in
the next commit. This will make the test easier too, maybe?

This should also enable graceful restart but not with the current
Docker Compose setup, we would need to use mode host or spawn a new one
in the same network namespace than the old one. This does not look like
very complex:

- spawn a new inlet in the same network namespace, but listening to a
  different HTTP port
- stop the previous inlet
- spawn a new inlet in the same network namespace
- stop the previous inlet

Alternatively, we could use SO_REUSEPORT for the HTTP socket too!
2025-10-28 09:45:51 +01:00
Vincent Bernat
9f5359d6ef build: make docker-dev works on non-Linux platforms
When running "make docker-dev" on MacOS, build for Linux.
2025-10-02 06:41:56 +02:00
Vincent Bernat
a35ca8bc07 build: replace license-compliance with pnpm
Less dependencies!
2025-09-18 08:13:08 +02:00
Vincent Bernat
fce383dbf4 build: switch to pnpm
It should be a bit more secure to not install scripts by default and to
allow one to update dependencies with a delay. Also, it is faster. The
downside is that it is not usually shipped with npm, but we can download
it through corepack (which is shipped with node). It also has more
builtin features, including patching packages (but we don't need that
anymore).
2025-09-18 07:31:45 +02:00
Vincent Bernat
dab2f78751 build: do not run install scripts with npm
We don't need them and they are a bit of a security hazard (but then, we
execute them, so that does not protect much).
2025-09-17 00:12:13 +02:00
Vincent Bernat
79a3266a98 build: add back -fullpath for regular tests
The previous bug in Go 1.22 preventing caching is now fixed.
2025-09-08 22:38:54 +02:00
Vincent Bernat
c28dd3e228 build: don't build linux/arm64/v8.2
This is mostly useless as Docker is not able to pull it as it cannot
detect the current variant. Some musings here:

https://github.com/containerd/platforms/pull/8#issuecomment-3263700642
2025-09-07 14:26:15 +02:00
Vincent Bernat
c1b590586a build: add future Docker support for ARM64 more granular variants 2025-09-07 13:14:58 +02:00
Vincent Bernat
7928084fde build: add some pointers to understand architecture variants
If we want to rely on Docker, we have a good granularity with AMD64, but
not for ARM64.
2025-09-07 12:27:28 +02:00
Vincent Bernat
6334173705 build: fix paths in embed.zip 2025-09-04 09:58:06 +02:00
Vincent Bernat
e69b919d1c build: remove embedded drawio diagrams from embedded SVG
Using only sed to not require some complex tool.
2025-09-04 07:41:08 +02:00
Vincent Bernat
b1d6382585 common/embed: replace all go:embed use by an embedded archive
Some of the files were quite big:

- asns.csv ~ 3 MB
- index.js ~ 1.5 MB
- *.svg ~ 2 MB

Use a ZIP archive to put them all and embed it. This reduce the binary
size from 89 MB to 82 MB. 🤯

This also pulls some code modernization (use of http.ServeFileFS).
2025-09-03 00:00:05 +02:00
Vincent Bernat
fa9e48d16a build: run a third job for misc tests 2025-08-31 15:27:59 +02:00
Vincent Bernat
94fb1c6483 build: accept building with a not up-to-date toolchain
While I was relunctant to let Go download the right toolchain if we
didn't have one, this makes everything simpler. The Go version is now
fully controlled by `go.mod`. It also a nice for people wanting to build
on older distributions.

For Nix, GOTOOLCHAIN is set to local, so we rely on `go_latest` being
up-to-date enough. But they are usually quite fast to update, so it
should be OK.
2025-08-30 19:14:59 +02:00
Vincent Bernat
01c93fb2e3 build: correctly express how to build .pb.go files
We can't do something generic but we don't have to. Let's use a grouped
rule.
2025-08-22 21:17:10 +02:00
Vincent Bernat
daaf419cef build: ensure proper caching of buf tool
We use a wrapper and we include it in the hash for setup-go
2025-08-21 08:34:15 +02:00
Vincent Bernat
6d84e5f3f6 build: ensure BUILD_ARGS do not come from environment
Setting a variable prevents it to be overriden by the environment. User
can still override it from the command line.
2025-08-21 07:51:05 +02:00
Vincent Bernat
8f284ff461 build: use _ARGS as suffix for variables augmenting arguments in make 2025-08-21 07:51:05 +02:00
Vincent Bernat
883e19922e build: add end-to-end testing 2025-08-20 13:41:54 +02:00
Vincent Bernat
5b86e7e4a7 build: don't use Corbetura for Go coverage anymore
gocov and gocovxml are unmaintained. There is
https://github.com/boumenot/gocover-cobertura which is linked from
Gitlab, but it is missing some lines during the conversion (code defined
in callbacks called from var, see hellogopher as an example), so it is
not reliable.
2025-08-20 07:13:12 +02:00
Vincent Bernat
b3db197d45 build: simplify coverage display 2025-08-18 20:25:43 +02:00
Vincent Bernat
bd59aba583 outlet/routing: add benchmarks for RIB performance 2025-08-16 15:15:35 +02:00
Vincent Bernat
a6cd6e3358 build: remove unused DATE variable 2025-08-11 07:57:01 +02:00
Vincent Bernat
ad10a2a783 build: add DOCKER_BUILD_OPTIONS variable to arguments to docker build
Notably, we can do:

```
make docker DOCKER_BUILD_OPTIONS=--platform=linux/amd64/v3
```
2025-08-10 10:42:22 +02:00
Vincent Bernat
2319993e9f build: fix changelog generation for GitHub release
This is quite brittle...
2025-08-04 22:04:14 +02:00
Vincent Bernat
e8dda92c0b docker: fix target variant conversion for ARM64 2025-08-04 15:51:57 +02:00
Vincent Bernat
9d4f8de2bf docker: ignore .git
And fetch version from $(VERSION) variable.
2025-08-04 15:45:28 +02:00
Vincent Bernat
d526ca451c build: add a platform independant step into Makefile
And cache it with Docker. This way, it only needs to be built once. And
remove the all_js target. There is another method when working on JS in
CONTRIBUTING.md.
2025-08-04 15:42:22 +02:00
Vincent Bernat
268e95ee18 docker: switch away from Nix to build Docker images
This should be faster to build multiarch images, as Nix requires
emulation, while we can build everything natively using builtin Go
cross-compilation support. Moreover, caching should be better.

Also, add Nix build to CI.

Also, build more architectures (linux/arm/v7).
2025-08-04 12:30:22 +02:00
Vincent Bernat
d930bbaa71 Revert "build: move staticcheck back with linting"
This reverts commit 0b3ba69845. This too
slow with small code modifications.
2025-08-04 11:19:07 +02:00
Vincent Bernat
0b3ba69845 build: move staticcheck back with linting
Make your mind!
2025-08-03 23:41:12 +02:00
Vincent Bernat
8a70c4020b build: move staticcheck into its own target/section 2025-08-03 15:44:27 +02:00
Vincent Bernat
4b33d44044 build: run staticcheck after testing 2025-08-02 21:14:51 +02:00
Vincent Bernat
41ee631b37 build: update default.pgo
And also add a specific target for that in Makefile.
2025-07-27 21:44:28 +02:00
Vincent Bernat
e49a744a6d build: use vtprotobuf to speedup protobuf marshal/unmarshal
There is still room for improvement. For inlet, it would require to know
when Kafka has sent the message (so enabling successes return). For
outlet, it should be possible to reuse the same flow (with a ResetVT
between each use).
2025-07-27 21:44:28 +02:00
Vincent Bernat
f4c879e525 build: switch from protoc to buf to build protobuf 2025-07-27 21:44:28 +02:00
Vincent Bernat
ac68c5970e inlet: split inlet into new inlet and outlet
This change split the inlet component into a simpler inlet and a new
outlet component. The new inlet component receive flows and put them in
Kafka, unparsed. The outlet component takes them from Kafka and resume
the processing from here (flow parsing, enrichment) and puts them in
ClickHouse.

The main goal is to ensure the inlet does a minimal work to not be late
when processing packets (and restart faster). It also brings some
simplification as the number of knobs to tune everything is reduced: for
inlet, we only need to tune the queue size for UDP, the number of
workers and a few Kafka parameters; for outlet, we need to tune a few
Kafka parameters, the number of workers and a few ClickHouse parameters.

The outlet component features a simple Kafka input component. The core
component becomes just a callback function. There is also a new
ClickHouse component to push data to ClickHouse using the low-level
ch-go library with batch inserts.

This processing has an impact on the internal representation of a
FlowMessage. Previously, it was tailored to dynamically build the
protobuf message to be put in Kafka. Now, it builds the batch request to
be sent to ClickHouse. This makes the FlowMessage structure hides the
content of the next batch request and therefore, it should be reused.
This also changes the way we decode flows as they don't output
FlowMessage anymore, they reuse one that is provided to each worker.

The ClickHouse tables are slightly updated. Instead of using Kafka
engine, the Null engine is used instead.

Fix #1122
2025-07-27 21:44:28 +02:00