Stefan Kecskes

Never stop learning, because life never stops teaching

Kafka Dead Letter Queue Triage: Debugging 25,000 Failed Messages

Complete guide to Kafka Connect Dead Letter Queue (DLQ) troubleshooting. Learn systematic triage methods, error classification, and replay strategies from real production incidents with 25,000+ failed messages.

KRaft: The Kafka Raft

Kafka’s new KRaft architecture replaces ZooKeeper with a built-in Raft-based metadata quorum, making the platform simpler, faster, and self-managing. In this post I explain how metadata now lives inside Kafka itself, why the change was needed, and how KIP-833 enables smooth migration from ZooKeeper to KRaft.

Kafka Connectors: More than just configs

An in-depth look at Kafka Connectors, focusing on their architecture, transformation features, schema management, error handling, and scalability. Includes practical configuration examples and lessons learned from real-world deployments.

Delta Lake Evolution and Migrations

In the world of data management, we often talk about schema migrations. But what exactly is schema migrations, and why it is so crucial to have a proper plan for data management? I will show you naive approach, explore some traditional solutions. We will see Delta Lake in action, but also how we can do schema migrations with our own way.

Data Modeling

Often, we leave the intricate details of data structures and performance to the DB Admin team, assuming that upscaling servers will solve everything. I used to think data modeling was just a fancy term for database design with only one right way to do it. Let’s talk about the crucial differences between transactional and analytical data modeling, each with its own tools and techniques

Using Volumes in Kubernetes

Volumes in Kubernetes are used to store data used by our applications. So that concept is very similar to volumes in docker containers. But there are some subtle differences, as always in life; nothing can be simple. :) There are many types of volumes in Kubernetes, and in this post, we will group them by properties and see some of the most common types.

Interviews these days...

Interviews are the dreaded part of the job search process. They can be nerve-wracking, stressful, and sometimes downright bizarre. Only software engineers will understand what I am talking about. What if I could show how conversations on interviews feel to non-software engineers?

Declarative Kubernetes

Imperative approach using kubectl .... is great, but we came at some point to situation where our commands became too long with many parameters or that running the same command again and again was time-consuming and more error-prone. That is where we stop using imperative approach and start to use declarative approach with Kubernetes Resource definition files.

Kubernetes basics

Kubernetes is more flexible and extensible tool, provides more mature features, like self-healing, rollouts and rollbacks, secret management, auto-scaling and I mean really large scale applications, adoption by big companies like Google, Microsoft, Amazon, IBM, etc. and can run in single cloud, multi-cloud, on-premises, hybrid cloud, etc. This might take longer to learn, but at the end it is worth it. So buckle up and let’s dive into the Kubernetes basics.

Docker Volumes

I am using docker in personal and professional projects for a couple of years now. Like everybody else, I learned it as I went along and learned as little as I needed to know to be able to deliver what I wanted. I never had a chance to sit down and look deeper into it (as no one does these days). But from time to time, I like to dive deeper to figure out more about handling data with docker. And then I thought to myself that what I summarized for myself mighty actually be helpful for someone else too. Therefore, if you are interested in knowing more about docker volumes, you are in the right place.

Lifetimes in Rust functions

Lifetimes in Rust are a way for the Rust compiler to ensure that the references are always valid. They prevent dangling references or data races. The compiler is checking the lifetimes at compile time. If I am right, Rust is the only language that has this concept. In this post, I will show you how to use lifetimes in functions, what doesn’t work, what not to do and what are the best practices.

Update Python on Ubuntu 22.04

Steps work also on Ubuntu 24.04

Ok, so you have a fresh installation of Ubuntu 22.04 (Jammy Jellyfish), and you would like to update the default Python 3.10 that comes preinstalled in Ubuntu 22.04 to the latest version. It seems trivial, as you think that you can just uninstall the old version and install the new one. But it is not that simple. The problem is that Ubuntu 22.04 uses python 3.10 for some of its internal tools, and if you uninstall it, you will break your system. I know it, because I did that and I would like to save you some time and pain from restoring your system.

Using GPG key for Git commits on Linux

Today, we will use GPG for signing Git commits and tags in Git, so that we can verify that the commit or tag was made by you and not someone else. So to say that the code was not tampered with. This is a great way of making sure that the code you are working on is not modified by someone else without your knowledge.

Concurrency vs Parallelism

Single-threaded, multi-threaded, concurrency, parallel tasks, async task… These words are used by programmers on daily basis and while most of us understands them (fingers crossed), I believe we are using this lingo in presence of non-technical people to confuse them? or to give them more detail, with little success. Let’s recapitulate what this all is, in very high level.

Symlinks in Unix

A symbolic link is a special form of a file. Actually it is not a file just a pointer to a file. This link points to another file somewhere in the file system. You can create link to files and folders. By the look, feel and functionality it is same as Windows shortcut or alias on iOS systems. If the content of the original file changes, so does the content of symlink.

Install NVM (Node Version Manager) for Node.js on Ubuntu 18.04

Node.js is javascript runtime. I am not going to explain why and how it can be used. You might be familiar that sometimes you just need other version, sometimes newer version, other times older version. There is an easy way to manage those versions with a single command and that’s what I want to introduce you to today.

Continuous Deployment

Part 2 of 2

In previous article, I demonstrated how to set up continuous Integration, that means how to test the code automatically and find out if it is the newest changes to code broke it or not. Now that you are automatically testing your commits, the next logical step in automation process would be to release our tested code to live website. We would want it to happen automatically, when all tests pass.

Continuous Integration with Strider

Part 1 of 2

We, developers, are producing websites or applications for many years now. What kinds of tasks needs to be done, before we see the changes live on web. This was a big unknown to me for a very long time. Is my process of deploying the code the best practice? Should I do it other way?

Speed up your website with Pagespeed mod

I’ve heard about some cool stuff that google is doing in one of software engineering podcasts. One of the tools was google pagespeed mod. It seemed to improve performance of the Apache2 webserver so I decided to give it a try.

Setting up XDebug for dev environment

I would like to describe how to set up xDebug to work in your phpStorm IDE. There are different options available depending on your preference - you can have xDebug always try to initiate a connection for your devbox, or you can use browser plugins and extensions to choose when xDebug should try to run.

Laravel validator for CSS selectors

Last week I was building a backend tool in Laravel, where you could create layout in bootstrap 3 and add CSS selectors like id or class to any container. You wanted to be able to enter more than one class name into input field. Let’s say that you want to add 2 classes: col-xs-6 infoBox_4. Laravel hasn’t validator for this type of string, so I decided to make one.

Move Local Git Repository to Bitbucket

We already had our codebase under git repository. I didn’t want to lose the history of commits. We also had some branches, with some dev work on it. Those branches weren’t approved and safe to merge into master branch. I wanted to have all this stuff also on bitbucket. You will see that this process is really easy.

Setting up a Git Repository

Repositories these days are one of the basic stones of any software development. It allows teams of people to work together on one piece of software and allow every team member to see who made what changes, when and why. Repositories basically hold the copy of all changes made to code and also gives you the latest, most recent version. I don’t want to go deeply into why is it good and why we (developers) can’t live without it. Today, I want to show you how you can set up your own git repository in your local company infrastructure.

Image sprites using CSS only

Web pages these days have many images. They are also called multimedia rich web pages. It may take a long time to load all of them. Each image means a server request from browser. Did you know that browsers these days download concurrently only 6 resources?

PHP Modules

Php modules or extensions are pieces of code for PHP, which extends the basic functions and add or improve the existing functions. Some of them are already bundled with PHP and can be easily enabled or disabled. There are also external PHP modules which can be installed to system and then enabled in PHP.

Apache Modules

Apache modules are software components that enhance the functionality and capabilities of the Apache HTTP Server. These modules are designed to extend and customize the server’s core features, allowing administrators and developers to add additional functionalities as per their requirements.

Setup Virtual Host

Today we will be creating virtual host on Apache2 web server. As one Apache2 web server can serve multiple websites we can later add more configs and tell Apache2 web server to serve all the websites from single unix instance.

Edit crontab with NANO

I often need to add some scheduled job on server. I mean something that runs periodically, like every day or every hour. You simply add a command that will run as scheduled and when I say command it can be anything that your system is capable of running. Therefore, it can be shell command or script or even a java application. But let’s look closer how could we set up our own cron task on linux.

Installing Composer.phar

Composer is the dependency manager for PHP. That means that chunks of php code, which are tested and each package solves one some problem are packed into a packages and added to packagist repository. Using composer we can get those packages and add them into our codebase, and so reuse the stable code.

LAMP stack

LAMP stands for Linux - Apache - MySql - PHP. This is basically everything you need to have a fully working testing server on your machine.

Install SSH key

Part 2

Today we are going to install the public key on server, that we want to use. The point of installing the Public key is to get to the target server, locate the authorized_keys file (usually in home directory inside .ssh folder) and add our public key to this file.

Generate SSH keys on Linux

Part 1

SSH is a cryptographic network protocol for initiating text-based shell sessions for secure data communication and/or remote command execution.

Welcome

Hello World, Hello Blog

I would like to present some stuff I’m working on or was working on, to show you what level of expertise you can expect from me, in case you hire me.