Bhupendra Yadav

Work

YugabyteDB

Sep 2024 – Present

Currently working at YugabyteDB.

Zeta (DirectI)

Software Engineer · Jan 2021 – Sep 2024

This is going to be a long one :)

I was just out of college when I first joined Zeta.

I had only used C/C++ for Competitive Programming, with no experience in Frontend, Backend, or DevOps. I wasn’t even familiar with Git.

During the first few weeks of work, my mentor explained some tasks to me and asked me to create a PR for it and share it with him.

I googled “PR” and the first result was Public Relations. I was like, What does this guy want? 😅

Upon asking my fellow teammates, I got to know he meant Pull Request. (At some places, it’s referred to as CL.)

That was the first time I set up Git and learned a bit about it.

tldr: I worked at Zeta for 3 yr 9 months. I worked on a lot of different things in my time there. I started as a DevOps guy, then to data engineering, and finally in the data Platform team as Backend dev.

Granfana and Prometheus (Jan 2021 - June 2021)

I initially joined the Data Infra team.

One stop database solution for devs (July 2021 - Feb 2022)

The Data Infra team was ok, but I wasn’t satisfied as I didn’t code a lot and wrote a lot of Helm charts there. I was more interested in coding. So, I tried a new FrontEnd project. I had never touched HTML/CSS before this—not even during my undergraduate.

In this project, I worked on building an internal website for monitoring and accessing logical databases (Postgres). It has tools embedded, e.g. pgweb for accessing the database, pgbadger for analyzing slow queries, etc. It provided a single place for all database-related tools and monitoring, with passwordless login to the database (details omitted).

This was built from an empty web page to a fully working state with Google Auth as login, using Vue JS, Typescript, SCSS, and Buefy.

PS: I have omitted lots of internal workings above for obvious reasons.

It was an interesting experience. I learned about how FE works, different types of HTTP request methods, REST, using DevTools for debugging, collaborating with BE folks, finalizing API specs, etc. But I also realized that Frontend is not for me, so I went on to try something new.

Then I moved to on to working with Flink and airflow. It was a flink library for very specific usecase for Batch processing.

I mostly worked as an Infra guy, upgrading flink/Airflow to latest version, using Flink K8s operator for deploying flink clusters, grafana dashboards for monitoring, writing helm charts for deploying new flink clusters.

I did not find it very interesting over time as after standardizing the setup, it was mostly about maintaining the setup and not much new learning.

Finally, I convinced my Manager that I want to work on Backend side of things and moves to a new team/project.

In this new team we built Flink as a Service for Record (a record can be thought of as a Kafka event, a line in a file, or a row in a database, etc.) processing use cases for our entire organization.

This was the first time I worked as a Backend developer.

The aim of this new product was solve use cases of Batch/Stream processing with a simple YAML specification, NO CODE:

For complex use cases, users could extend the Java library and write their own custom operators.

We had an internal Java library that would translate these YAML specification to an actual Flink job and execute it.

Platform Overview:

This platform consists of:

  1. A Java library on top of Flink, providing lots of out-of-the-box (OOTB) source/sink connectors, transformations, HTTP operators, etc. It was much more than just a wrapper over Flink, with features like:

    • Custom metrics
    • Exception logging
    • Writing data to Flink’s side output for record-level processing stats, etc.
  2. The Control plane, which accepts the job specification (defined in YAML/JSON) and executes the job. It has many metrics for job monitoring and reconciliation. I wrote most of the control plane in Java + Spring Boot for:

    • Managing the end-to-end lifecycle of a Flink job
    • Submitting new jobs
    • Reconciling in-progress jobs
    • Post-processing jobs once they are finished
  3. Self-hosted Flink clusters on K8s. We self hosted Flink on K8s using Flink Kubernetes Operator. I used to manage it fully.My previous experience as DevOps helped a lot here.

We also used Trino(self hosted) for calculating the record processing stats, provided to our users as an offering for.

Key Learnings:

I learned a lot during this project. It was a very different mindset and kind of work when you are building a platform that is directly used by other fellow developers.

Product Advocacy:

Building a product is one thing, but advocating for it, gathering feedback, iterating on it, and making it better is a different thing.

Testing at scale:

We did load testing of our platform to prove it’s scalability and reliability. Some of the tests we did:

It was the most challenging and interesting project I worked on at Zeta.