Blog Archive
-
March 2025
1
- Mar 13, 2025 Log Replication Disaggregation Survey - Apache Pulsar and BookKeeper Mar 13, 2025
-
February 2025
7
- Feb 21, 2025 Log Replication Disaggregation Survey - Kafka Replication Protocol Feb 21, 2025
- Feb 19, 2025 Log Replication Disaggregation Survey - Neon and MultiPaxos Feb 19, 2025
- Feb 17, 2025 Towards composable data platforms Feb 17, 2025
- Feb 10, 2025 How to disaggregate a log replication protocol Feb 10, 2025
- Feb 6, 2025 Steady on! Separating Failure-Free Ordering from Fault-Tolerant Consensus Feb 6, 2025
- Feb 5, 2025 An Introduction to Virtual Consensus in Delos Feb 5, 2025
- Feb 3, 2025 Why Snowflake wants streaming Feb 3, 2025
-
January 2025
1
- Jan 16, 2025 AI Agents in 2025 Jan 16, 2025
-
December 2024
3
- Dec 9, 2024 On 1 million page views Dec 9, 2024
- Dec 6, 2024 To be atomic or non-atomic, that is the question (Fizzbee) Dec 6, 2024
- Dec 5, 2024 An introduction to symmetry in TLA+ Dec 5, 2024
-
November 2024
7
- Nov 26, 2024 Dismantling ELT: The Case for Graphs, Not Silos Nov 26, 2024
- Nov 21, 2024 The Law of Large Numbers: A Foundation for Statistical Modeling in Distributed Systems Nov 21, 2024
- Nov 19, 2024 Obtaining statistical properties through modeling and simulation Nov 19, 2024
- Nov 13, 2024 Incremental Jobs and Data Quality Are On a Collision Course - Part 2 - The Way Forward Nov 13, 2024
- Nov 13, 2024 Incremental Jobs and Data Quality Are On a Collision Course - Part 1 - The Problem Nov 13, 2024
- Nov 5, 2024 On writing and getting from zero to done Nov 5, 2024
- Nov 2, 2024 Learning first that you can learn Nov 2, 2024
-
October 2024
4
- Oct 31, 2024 Forget the table format war; it’s open vs closed that counts Oct 31, 2024
- Oct 28, 2024 The ultimate guide to table format internals - all my writing so far Oct 28, 2024
- Oct 24, 2024 The teacher's nemesis Oct 24, 2024
- Oct 21, 2024 The curse of Conway and the data space Oct 21, 2024
-
September 2024
3
- Sep 26, 2024 Table format interoperability, future or fantasy? Sep 26, 2024
- Sep 19, 2024 Table format comparisons - Change queries and CDC Sep 19, 2024
- Sep 11, 2024 BYOC, not “the future of cloud services” but a pillar of an everywhere platform Sep 11, 2024
-
August 2024
4
- Aug 23, 2024 Constraints breed innovation and so does tenacity Aug 23, 2024
- Aug 22, 2024 Table format comparisons - Streaming ingest of row-level operations Aug 22, 2024
- Aug 13, 2024 Table format comparisons - Append-only tables and incremental reads Aug 13, 2024
- Aug 7, 2024 Table format comparisons - How do the table formats represent the canonical set of files? Aug 7, 2024
-
June 2024
1
- Jun 10, 2024 A Cost Analysis of Replication vs S3 Express One Zone in Transactional Data Systems Jun 10, 2024
-
May 2024
2
- May 7, 2024 Learning and reviewing system internals: tactics and psychology May 7, 2024
- May 2, 2024 Hybrid Transactional/Analytical Storage May 2, 2024
-
March 2024
3
- Mar 26, 2024 The Sisyphean struggle and the new era of data infrastructure Mar 26, 2024
- Mar 19, 2024 Tableflow: the stream/table, Kafka/Iceberg duality Mar 19, 2024
- Mar 13, 2024 The beauty of writing Mar 13, 2024
-
November 2023
2
- Nov 29, 2023 S3 Express One Zone, not quite what I hoped for Nov 29, 2023
- Nov 14, 2023 The Architecture of Serverless Data Systems Nov 14, 2023
-
October 2023
4
- Oct 10, 2023 The importance of liveness properties (with TLA+ Part 2) Oct 10, 2023
- Oct 10, 2023 The importance of liveness properties (with TLA+ Part 1) Oct 10, 2023
- Oct 9, 2023 A primer on formal verification and TLA+ Oct 9, 2023
- Oct 3, 2023 The advantages of queues on logs Oct 3, 2023
-
September 2023
1
- Sep 25, 2023 On the future of cloud services and BYOC Sep 25, 2023
-
August 2023
1
- Aug 17, 2023 Kafka KIP-966 - Fixing the Last Replica Standing issue Aug 17, 2023
-
May 2023
2
- May 15, 2023 Kafka vs Redpanda Performance - Do the claims add up? May 15, 2023
- May 9, 2023 Is sequential IO dead in the era of the NVMe drive? May 9, 2023
-
April 2023
1
- Apr 24, 2023 Why Apache Kafka doesn't need fsync to be safe Apr 24, 2023
-
December 2022
1
- Dec 28, 2022 Windows shortcut to invert colours that works Dec 28, 2022
-
June 2022
1
- Jun 9, 2022 Applying Flexible Paxos to Raft Jun 9, 2022
-
January 2022
1
- Jan 25, 2022 Write for others but mostly for yourself Jan 25, 2022
-
December 2021
2
- Dec 10, 2021 Tweaking the BookKeeper protocol - Unbounded Ledgers Dec 10, 2021
- Dec 8, 2021 Tweaking the BookKeeper protocol - Guaranteeing write quorum Dec 8, 2021
-
October 2021
3
- Oct 9, 2021 Learn about TLA+ and the formal verification of Apache BookKeeper Oct 9, 2021
- Oct 9, 2021 Posts I wrote on the RabbitMQ blog in 2020 Oct 9, 2021
- Oct 9, 2021 Kafka and RabbitMQ blog posts I wrote elsewhere in 2019 Oct 9, 2021
-
May 2020
2
- May 26, 2020 With Great Observation Comes Great Insight May 26, 2020
- May 14, 2020 Why I'm Not Writing Much On My Blog These Days May 14, 2020
-
September 2019
1
- Sep 6, 2019 A Look at Multi-Topic Subscriptions with Apache Pulsar Sep 6, 2019
-
February 2019
2
- Feb 10, 2019 Building A "Simple" Distributed System - It's the Logs Stupid Feb 10, 2019
- Feb 2, 2019 Building A "Simple" Distributed System - The Implementation Feb 2, 2019
-
January 2019
3
- Jan 28, 2019 Building A "Simple" Distributed System - Formal Verification Jan 28, 2019
- Jan 27, 2019 Building A "Simple" Distributed System - The Protocol Jan 27, 2019
- Jan 26, 2019 Building a "Simple" Distributed System - The What Jan 26, 2019
-
November 2018
3
- Nov 20, 2018 Quorum Queues - Making RabbitMQ More Competitive in Reliable Messaging Nov 20, 2018
- Nov 14, 2018 Why I Am Not a Fan of the RabbitMQ Sharding Plugin Nov 14, 2018
- Nov 2, 2018 Testing Producer Deduplication in Apache Kafka and Apache Pulsar Nov 2, 2018
-
October 2018
2
- Oct 21, 2018 How to (not) Lose Messages on an Apache Pulsar Cluster Oct 21, 2018
- Oct 3, 2018 Understanding How Apache Pulsar Works Oct 3, 2018
-
September 2018
4
- Sep 20, 2018 How to Lose Messages on a Kafka Cluster - Part 2 Sep 20, 2018
- Sep 18, 2018 How to Lose Messages on a Kafka Cluster - Part 1 Sep 18, 2018
- Sep 13, 2018 How to Lose Messages on a RabbitMQ Cluster Sep 13, 2018
- Sep 5, 2018 RabbitMQ vs Kafka Part 6 - Fault Tolerance and High Availability with Kafka Sep 5, 2018
-
August 2018
2
- Aug 31, 2018 RabbitMQ vs Kafka Part 5 - Fault Tolerance and High Availability with RabbitMQ Clustering Aug 31, 2018
- Aug 14, 2018 AWS Security - Securing Your Use of the AWS CLI and Automation Tools Aug 14, 2018
-
July 2018
2
- Jul 25, 2018 RabbitMQ Work Queues: Avoiding Data Inconsistency with Rebalanser Jul 25, 2018
- Jul 23, 2018 Creating Consumer Groups in RabbitMQ with Rebalanser - Part 1 Jul 23, 2018
-
May 2018
3
- May 26, 2018 Docker, .NET Core and Redshift Drivers May 26, 2018
- May 21, 2018 Event-Driven Architectures - Queue vs Log - A Case Study May 21, 2018
- May 20, 2018 Event-Driven Architectures - The Queue vs The Log May 20, 2018
-
April 2018
5
- Apr 28, 2018 SQL Server CDC to Redshift Pipeline Apr 28, 2018
- Apr 21, 2018 Processing Pipelines Series - Reactive Extensions (Rx.NET) Apr 21, 2018
- Apr 19, 2018 Processing Pipelines Series - TPL Dataflow - Alternate Scenario Apr 19, 2018
- Apr 18, 2018 Processing Pipelines Series - TPL Dataflow Apr 18, 2018
- Apr 17, 2018 Processing Pipelines Series - Concepts Apr 17, 2018
-
January 2018
4
- Jan 25, 2018 AgileTM vs Real Agility - The Constant Rush Jan 25, 2018
- Jan 16, 2018 AgileTM vs Real Agility - Truly Self-Organizing Teams Jan 16, 2018
- Jan 15, 2018 AgileTM vs Real Agility - The Fight Is On Jan 15, 2018
- Jan 4, 2018 Don't Believe The Hype Jan 4, 2018
-
December 2017
5
- Dec 26, 2017 RabbitMQ vs Kafka Part 4 - Message Delivery Semantics and Guarantees Dec 26, 2017
- Dec 10, 2017 RabbitMQ vs Kafka Part 3 - Kafka Messaging Patterns Dec 10, 2017
- Dec 10, 2017 RabbitMQ vs Kafka Part 2 - RabbitMQ Messaging Patterns Dec 10, 2017
- Dec 10, 2017 RabbitMQ vs Kafka Part 1 - Two Different Takes on Messaging Dec 10, 2017
- Dec 10, 2017 RabbitMQ vs Kafka Series Introduction Dec 10, 2017
-
September 2017
1
- Sep 17, 2017 You don't need Scrum, you need Agility Sep 17, 2017
-
June 2017
3
- Jun 16, 2017 Kathryn McConkey - The Best Osteopath in Barcelona Jun 16, 2017
- Jun 12, 2017 How to Make Your Messaging System Reliable and Keep Your Support Engineers Happy Jun 12, 2017
- Jun 10, 2017 DSL Parser - Sample Code Jun 10, 2017
-
March 2017
10
- Mar 24, 2017 RabbitMq Delayed Retry Approaches (That Work) Mar 24, 2017
- Mar 20, 2017 Reliability - Custom Retries - NServiceBus with RabbitMq Part 6 Mar 20, 2017
- Mar 19, 2017 Reliability - Default Retries - NServiceBus with RabbitMq Part 5 Mar 19, 2017
- Mar 18, 2017 Custom Topology - NServiceBus with RabbitMq Part 4 Mar 18, 2017
- Mar 17, 2017 Custom Direct Topology - NServiceBus with RabbitMq Part 3 Mar 17, 2017
- Mar 16, 2017 Default Topologies - NServiceBus with RabbitMq Part 2 Mar 16, 2017
- Mar 16, 2017 Default Topologies - NServiceBus with RabbitMq Part 1 Mar 16, 2017
- Mar 12, 2017 How to Deal with Unroutable Messages - RabbitMq Publishing Part 3 Mar 12, 2017
- Mar 11, 2017 Sending Messages in Bulk and Tracking Delivery Status - RabbitMq Publishing Part 2 Mar 11, 2017
- Mar 11, 2017 Types of Publishing Failures - RabbitMq Publishing Part 1 Mar 11, 2017
-
February 2017
1
- Feb 22, 2017 Have you got chronic eye pain like me? Feb 22, 2017
-
November 2016
6
- Nov 15, 2016 new SqlConnection - The requested Performance Counter is not a custom counter Nov 15, 2016
- Nov 12, 2016 Building Synkronizr - A SQL Server Data Synchronizer Tool - Part 1 Nov 12, 2016
- Nov 9, 2016 Generating SQL from a Data Structure Nov 9, 2016
- Nov 8, 2016 How to Kill a Keep Alive with a Weak Reference (C#) Nov 8, 2016
- Nov 7, 2016 How Row Locking Makes Taskling Concurrency Controls Possible Nov 7, 2016
- Nov 6, 2016 Announcing Taskling.NET, a C# Batch Job API Nov 6, 2016
-
October 2016
3
- Oct 30, 2016 Too Busy to Create Your Own Visualizations? Just Leverage the Neo4J Console Oct 30, 2016
- Oct 27, 2016 Why You Should Understand Databases Oct 27, 2016
- Oct 24, 2016 Exploring the use of Hash Trees for Data Synchronization - Part 1 Oct 24, 2016
-
July 2016
1
- Jul 3, 2016 5 Tricks For People Who Are Hyper Sensitive to Computer Screens Jul 3, 2016
-
February 2016
6
- Feb 25, 2016 Optimizing Regex performance with RegexOptions.RightToLeft Feb 25, 2016
- Feb 24, 2016 A More Efficient Regex Tokenizer Feb 24, 2016
- Feb 11, 2016 Implementing a DSL Parser Feb 11, 2016
- Feb 4, 2016 Understanding Grammars Feb 4, 2016
- Feb 4, 2016 Creating a Simple Tokenizer (Lexer) in C# Feb 4, 2016
- Feb 4, 2016 How to Create a Query Language DSL with C# Feb 4, 2016
-
January 2016
11
- Jan 26, 2016 Detective Optimizers Jan 26, 2016
- Jan 19, 2016 The Freedom Quadrant Jan 19, 2016
- Jan 6, 2016 Logging Query Language (LQL) – a DSL for Log Analytics Jan 6, 2016
- Jan 4, 2016 Bitching will erode your team Jan 4, 2016
- Jan 4, 2016 "We" Jan 4, 2016
- Jan 4, 2016 Breaking your own code and designs Jan 4, 2016
- Jan 4, 2016 Make mini technical leads Jan 4, 2016
- Jan 4, 2016 Code analysis rules versus training and coaching Jan 4, 2016
- Jan 4, 2016 Code Analysis Rules and the Click Through Culture Jan 4, 2016
- Jan 4, 2016 Being Open, Sharing Your Knowledge Jan 4, 2016
- Jan 4, 2016 Stop time wasters and protect your knowledge sharing culture Jan 4, 2016