Unkillable zombie blog

This blog just won't die

Jun 08, 2026

Gafkalo is going strong

First, some notes about this post

This blog post is partially written by AI. I cleared up the text, added in my own mistakes. I’m not a fan of LLM content, as it is typically AI-slop, however , as this blog received an update in 2015, one in 2017 and 2 updates in 2021 with one of being about migrating a static website (Pelican) to Kubernetes, i thoight it was very fittign that the next post, in 2026 would be partly written by AI.

In fact, it was not just written by AI, but keeping up with the tradition, but done in a massive overkill way using opencode with oh-my-openagent (details in this blog )

Now to the main topic. Back in July 2021 I announced Gafkalo, a CLI tool to manage Confluent Kafka resources using YAML and RBAC. It has come a long way since then.

The project has seen several releases and a lot of commits. It is still actively maintained. What started as a tool to scratch a personal itch has grown into a fairly comprehensive Confluent platform management utility.

Here are some of the major features and improvements that have landed since that initial announcement.

Connector lifecycle management

Connectors were always supported, but now they are fully first-class citizens. You can manage them declaratively in YAML with proper plan and apply workflows, including diff output that shows old versus new configuration values. Gafkalo also detects masked sensitive fields from Confluent Connect, so it does not falsely report drift on hidden password fields.

SOPS integration and secret masking

For teams running Gafkalo in GitOps pipelines, two security features are important. First, SOPS encryption is supported for input YAML files, allowing sensitive connector configuration to be stored encrypted in Git. Second, sensitive keys in output can be masked via configurable regular expressions, keeping secrets out of logs and CI output.

Better CLI ergonomics

A number of quality-of-life improvements make day-to-day use smoother. Bash and ZSH auto-completion is supported. You can create topics and list all topics directly from the command line without writing YAML. Consumer output supports JSON format for piping into other tools, and Kafka record headers are now displayed. Partition reassignment can also be done via CLI.

More authencation protocols supported

Enterprise authentication options expanded significantly. Mutual TLS is now supported for Kafka connections, along with SCRAM SHA-256 and SHA-512. TLS support was also added for the Confluent Metadata Server, enabling RBAC management over secure connections. Most of these are tested using test-containers. One that has been a long-time pain point for me is Kerberos, which is finally tested.

Closing thoughts

Gafkalo remains a single, dependency-free binary that you can drop anywhere and use to manage topics, schemas, RBAC permissions, connectors, and now cluster links. If you are running Confluent platform and want a GitOps-friendly way to manage it, it is worth a look.

Documentation is at https://gafkalo.readthedocs.io/ and the code is on GitHub.

Click to read and post comments

Jul 05, 2021

Announcing Gafkalo

Annoucing the release of Gafkalo. A tool to manage a Confluent Kafka platform.

While there are a few tools that manage Kafka resources with any current solution, and as they says goes, i scratched a personal itch.

What is Gafkalo?

It is a CLI tool that can primarily be used to manage resources in Confluent platform, using RBAC.

You can provide it with a YAML input definition of Topics, their Key and Value schemas, permissions for any principals and the tool will make the required changes to your cluster.

An example YAML:

topics:
  - name: SKATA.VROMIA.POLY
    partitions: 6
    replication_factor: 1
    # Any topic configs can be added to this key
    configs:
      cleanup.policy: delete
      min.insync.replicas: 1
      retention.ms: 10000000
    key:
      schema: "schema-key.json"
      compatibility: BACKWARD
    value:
      schema: "schema.json"
      compatibility: NONE
  - name: SKATA.VROMIA.LIGO
    partitions: 6
    replication_factor: 3
    configs:
      cleanup.policy: delete
      min.insync.replicas: 1
    key:
      schema: "schema-key.json"
  - name: SKATA1
    partitions: 1
    replication_factor: 1

Having a nice set of topics + schemas is not much useful if nobody can use them. So lets assign some permissions.

Gafkalo currently operates under the idea of giving a set of roles that match a usage pattern. Namely a being a consumer, a producer or (or resourceowner).

For example when assigning consumer_for to a topic, the tool will also create read permissions to the corresponding schema registry subjects, and optionally the consumer group.

Example:

clients:
  # principals must be in the form User:name or Group:name
  # For each principal you can have a consumer_for, producer_for or resourceowner_for
  # and the topics for each of these categories
  - principal: User:poutanaola
    consumer_for:
      # By default we will use PREFIXED.
      # set prefixed: false to set it to LITERAL
      - topic: TOPIC1.
      - topic: TOPIC2.
        prefixed: false
    producer_for:
      - topic: TOPIC1.
    resourceowner_for:
      - topic: TOPIC4.
  - principal: Group:malakes
    consumer_for:
      - topic: TOPIC1.
      - topic: TOPIC2.
    producer_for:
      - topic: TOPIC1.
        strict: false
    groups:
      - name: consumer-produser-
        # if not specified, roles is [DeveloperRead]
        # roles: ["ResourceOwner"]
        # prefixed is true by default but can be disabled like below
        refixed: false

After configuring gafkalo with the required config file (pointing it to bootstrap brokers, schema registry and all required authenticaton you can see a plan of what it would do:

gafkalo plan --config myconfig.yaml

This will produce an output of what operations are going to take place if you run in apply mode.

Once you are satisfied that its going to do the right thing, run in apply (yes, obviously inspired by terrafor..)

gafkalo apply --config myconfig.yaml

You will, again, get a report of what actions were taken.

It is not yet supported to increase replication_factor for topics, but should be easy to implement as re-assignment strategy code is already present..

Debugging tool

Apart from maintaining the state of your cluster, Gafkalo can be a nice debugging tool.

Some functions are:

  • consumer
  • producer
  • schema checker
    • Get a diff between a registered schema and a provided json.
    • Check if a schema is already registered under a subject

As a debugging tool, there are plenty of features to be added still. For example, it will be quite nice to send tombstones manually. Especially when managing some connectors like Debezium it is often required to drop recorded offsets from connectors.

Consumer

Gafkalo can be used as a consumer. It supports reading from multiple topics, setting consumer group, idempotence and resetting partition:offset.

Additionally, it supports pointing it to a Go template file to format records any way you want!

More details in the documentation

Click to read and post comments

Feb 04, 2021

K8S upgrade

This shitty, unmaintained blog that is made with a static site generator, is now running in Kubernetes.

I took the time to setup a private cluster to serve mostly internal tools for my home (Identity management etc) available over my VPN, but also moved some external facing stuff.

So that meant that this blog,that i have not written to in years, gets to run in Kubernetes. :)

In fact it even has its own Helm chart, and certificates with cert-manager now :D

posted at 20:35  ·   ·  k8s  blog
Click to read and post comments

May 23, 2013

Αλλαγή blog engine

To byteflow που χρησιμοποιούσα στο kill9.eu είναι unmaintained εδώ και χρόνια και χρειαζόταν συνέχεια προσοχή και σκάλισμα.

Αφού έψαξα διάφορα blog engines σε Django ανακάλυψα οτι καμία δεν μου έκανε (!).

Ηθελα:

  • Απλό. Χωρίς πολλά dependencies και configuration
  • Syntax highlighting.
  • Maintained χωρίς φόβο οτι σε 1 χρόνο θα ψάχνω νέο engine
  • Να μπορώ να μεταφέρω έυκολα τα υπάρχοντα post που είναι σε HTML / RST και MARKDOWN
  • Να είναι cool :)

Τελικά αποφάσισα να δοκιμάσω το pelican static blog generator.

posted at 16:26  ·   ·  pelican  blog
Click to read and post comments

Sep 27, 2008

Νέο software στο blog

Εδώ και μερικές ημέρες έχω αλλάξει το software του blog μου. Το προηγούμενο software το είχα γράψει εγώ, ήταν πολύ απλό και είχα αρχίσει να θέλω features που δεν είχα χρόνο και όρεξη να γράψω. Έτσι “βγήκα στην γύρα” για αναζήτηση blogging software που θα ικανοποιούσε τις ανάγκες μου.

Το νέο software είναι το byteflow , είναι γραμμένο σε Django. Το byteflow έχει πολλά χαρακτηριστικά, αλλα αυτά που εγώ ήθελα κυρίως είναι:

  • Να υποστηρίζει τουλάχιστον μια Lightweight Markup Language. Το να γράφεις τα post σε Markdown αντί για HTML είναι πολύ σημαντικό. Επίσης οι WYSIWYG editors δεν με βολεύουν γιατί βγάζουν απαράδεκτη HTML γεμάτη με HTML entities. Ειδικά στα Ελληνικά κείμενα δεν διαβάζεται η HTML.
  • Syntax Highlighting σε τμήματα που περιέχουν κώδικα. Το byteflow δεν υποστηρίζει ακόμα syntax highlighting αλλα είναι παρα πολύ εύκολο να προστεθεί αυτή η δυνατότητα για κείμενα με markdown σύνταξη. Το έφτιαξα μόνος μου. Θα ακολουθήσει post με λεπτομέρειες για αυτό.
  • Pingbacks

Πέρα απο τα features που ήταν σημαντικά για εμένα , το byteflow έχει αρκετά ακόμα features όπως:

  • threaded comments
  • Σωστή διαχείριση των χρηστών (το πρώτο comment ισούται εγγραφή, έχεις λογαριασμό, κλπ κλπ)
  • Υποστήριξη Gravatar
  • Captcha ( και ReCaptcha ) support
  • OpenID
  • Themes (Η δημιουργία theme θα πρέπει να είναι σαφώς ευκολότερη απο κάποια γνωστά PHP πακέτα αφού το Django χρησιμοποιεί μια πολύ απλή templating γλώσσα και δεν έχει PHP/SQL/HTML/Whatever ανακατεμένα σε ένα αρχείο.)
  • Κάνει import απο το wordpress.
  • Javascript preview στα comments και απάντηση στο comment που θές (απαραίτητο αφού είναι threaded τα comments)
  • Στα φιλτράρισμα με βάση τα tags υποστηρίζει σύνολα (intersection με + και union με το |). Για παράδειγμα, αν θέλουμε όλα τα posts που έχουν τα tags django και greek: http://kill9.eu/tag/django+greek/ , ενώ αν θέλουμε όλα τα posts που έχουν τα tags django ή greek τότε: http://kill9.eu/tag/django|greek/ Με τον ίδιο τρόπο φτιάχνουμε και feeds. Πολύ χρήσιμο feature. Κάποιος μπορεί να θέλει μόνο άρθρα σε Django που είναι γραμμένα στα Ελληνικά. Απλά ζητάει το intersection των django και greek tags.
  • Και άλλα πολλά όπως ένα προαιρετικό WYSIWYG editor (που μάλιστα μοιάζει ενδιαφέρον αλλα δεν πρόλαβα να τον εξερευνήσω ακόμα) , XFN , κλπ.

Αν και έγραψα scripts για να κάνω μεταφορά της database απο το παλιό στο καινούργιο, δυστυχώς τα comments δεν μπορούσα να τα μεταφέρω χωρίς να ενοχλήσω όσους είχαν σχολιάσει στο παρελθόν (μιας και είναι υποχρεωτική η εγγραφή τώρα, στέλνει email με επιβεβαίωση) Θα προσπαθήσω να τα προσθέσω όταν κάποιος κάνει σχόλιο στο μέλλον (και φτιάξει προφίλ δηλαδή).

To byteflow αναπτύσσεται ενεργά και η εγκατάστασή του είναι εύκολη. Υπάρχουν μερικά bugs και κάποια απο τα default themes δεν δουλεύουν σωστά.

posted at 18:20  ·   ·  blog  greek  django
Click to read and post comments