Return-Path: <tjphuhs@gmail.com>
Received: from smtpclient.apple ([2607:fb90:e2aa:4ef4:f007:d4e8:dd26:efe0])
        by smtp.gmail.com with ESMTPSA id 00721157ae682-79917ee574bsm105579967b3.26.2026.03.17.08.46.28
        for <oc.tjphuhs@gmail.com>
        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
        Tue, 17 Mar 2026 08:46:28 -0700 (PDT)
Content-Type: multipart/alternative; boundary=Apple-Mail-63BC2587-E5C7-403F-8E50-54C5DFDBC8B8
Content-Transfer-Encoding: 7bit
From: TJ Bourdeau <tjphuhs@gmail.com>
Mime-Version: 1.0 (1.0)
Date: Tue, 17 Mar 2026 11:46:27 -0400
Subject: Fwd: How Reddit Migrated Petabyte-Scale Kafka from EC2 to Kubernetes
Message-Id: <1746BD14-442A-4778-8348-5D59564E022C@gmail.com>
References: <20260317153044.3.2a3f922fe4665210@mg-d0.substack.com>
To: oc.tjphuhs@gmail.com
X-Mailer: iPhone Mail (23D8133)


--Apple-Mail-63BC2587-E5C7-403F-8E50-54C5DFDBC8B8
Content-Type: text/html;
	charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html class=3D"apple-mail-supports-explicit-dark-mode"><head><meta http-equi=
v=3D"content-type" content=3D"text/html; charset=3Dutf-8"></head><body dir=3D=
"auto"><br id=3D"lineBreakAtBeginningOfSignature"><div dir=3D"ltr">TJ</div><=
div dir=3D"ltr"><br>Begin forwarded message:<br><br></div><blockquote type=3D=
"cite"><div dir=3D"ltr"><b>From:</b> ByteByteGo &lt;bytebytego@substack.com&=
gt;<br><b>Date:</b> March 17, 2026 at 11:43:14=E2=80=AFAM EDT<br><b>To:</b> t=
jphuhs@gmail.com<br><b>Subject:</b> <b>How Reddit Migrated Petabyte-Scale Ka=
fka from EC2 to Kubernetes</b><br><b>Reply-To:</b> ByteByteGo &lt;reply+357r=
w3&amp;4iwoe6&amp;&amp;457f75760bc411accd07b85c686060610590a8b4419f12cd9695d=
552c12ad6be@mg1.substack.com&gt;<br><br></div></blockquote><blockquote type=3D=
"cite"><div dir=3D"ltr">=EF=BB=BF<meta charset=3D"utf-8"><title>How Reddit M=
igrated Petabyte-Scale Kafka from EC2 to Kubernetes</title><style>.typograph=
y .pullquote-align-left, .typography.editor .pullquote-align-left, .typograp=
hy .pullquote-align-right, .typography.editor .pullquote-align-right, .typog=
raphy .pullquote-align-wide, .typography.editor .pullquote-align-wide, .typo=
graphy .pullquote-align-center, .typography.editor .pullquote-align-center {=
 float: none; margin: 0px auto; width: 100%; max-width: 100%; }
.typography, .typography.editor { }
.typography .captioned-image-container figure:has(> a.image2-align-left), .t=
ypography.editor .captioned-image-container figure:has(> a.image2-align-left=
), .typography .captioned-image-container figure:has(> a.image2-align-right)=
, .typography.editor .captioned-image-container figure:has(> a.image2-align-=
right) { float: none; margin: 1em auto; max-width: 100%; width: auto; paddin=
g: 0px; }
.typography .captioned-image-container figure:has(> a.image2-align-left.thef=
p), .typography.editor .captioned-image-container figure:has(> a.image2-alig=
n-left.thefp), .typography .captioned-image-container figure:has(> a.image2-=
align-right.thefp), .typography.editor .captioned-image-container figure:has=
(> a.image2-align-right.thefp) { margin: 1em auto; }
.typography .captioned-image-container figure:has(> a.image2-offset-left), .=
typography.editor .captioned-image-container figure:has(> a.image2-offset-le=
ft), .typography .captioned-image-container figure:has(> a.image2-offset-rig=
ht), .typography.editor .captioned-image-container figure:has(> a.image2-off=
set-right) { margin: 1em auto; }
.typography .captioned-image-container figure:has(> a.image2-align-left) .im=
age2-inset, .typography.editor .captioned-image-container figure:has(> a.ima=
ge2-align-left) .image2-inset, .typography .captioned-image-container figure=
:has(> a.image2-align-right) .image2-inset, .typography.editor .captioned-im=
age-container figure:has(> a.image2-align-right) .image2-inset { display: bl=
ock; justify-content: initial; }
.typography .markup div.sponsorship-campaign-embed, .typography.editor .mark=
up div.sponsorship-campaign-embed { margin-top: 24px; margin-bottom: 24px; }=

.typography .markup div.sponsorship-campaign-embed:first-child, .typography.=
editor .markup div.sponsorship-campaign-embed:first-child { margin-top: 0px;=
 }
.typography .markup div.youtube-overlay, .typography.editor .markup div.yout=
ube-overlay, .typography .markup div.vimeo-overlay, .typography.editor .mark=
up div.vimeo-overlay { display: none !important; }
.typography .markup div.embedded-publication-wrap .embedded-publication.show=
-subscribe, .typography.editor .markup div.embedded-publication-wrap .embedd=
ed-publication.show-subscribe { padding: 24px; }
.typography .markup div.subscription-widget-wrap .subscription-widget.show-s=
ubscribe, .typography.editor .markup div.subscription-widget-wrap .subscript=
ion-widget.show-subscribe, .typography .markup div.subscription-widget-wrap-=
editor .subscription-widget.show-subscribe, .typography.editor .markup div.s=
ubscription-widget-wrap-editor .subscription-widget.show-subscribe, .typogra=
phy .markup div.captioned-button-wrap .subscription-widget.show-subscribe, .=
typography.editor .markup div.captioned-button-wrap .subscription-widget.sho=
w-subscribe { padding: 0px 24px; }
.typography .markup div.subscription-widget-wrap .subscription-widget.show-s=
ubscribe .subscription-widget-subscribe .button, .typography.editor .markup d=
iv.subscription-widget-wrap .subscription-widget.show-subscribe .subscriptio=
n-widget-subscribe .button, .typography .markup div.subscription-widget-wrap=
-editor .subscription-widget.show-subscribe .subscription-widget-subscribe .=
button, .typography.editor .markup div.subscription-widget-wrap-editor .subs=
cription-widget.show-subscribe .subscription-widget-subscribe .button, .typo=
graphy .markup div.captioned-button-wrap .subscription-widget.show-subscribe=
 .subscription-widget-subscribe .button, .typography.editor .markup div.capt=
ioned-button-wrap .subscription-widget.show-subscribe .subscription-widget-s=
ubscribe .button { padding: 10px 12px; min-width: 110px; }
.typography .markup .twitter-embed, .typography.editor .markup .twitter-embe=
d, .typography .markup .tweet, .typography.editor .markup .tweet { padding: 1=
2px; }
.typography .markup .twitter-embed .tweet-text, .typography.editor .markup .=
twitter-embed .tweet-text, .typography .markup .tweet .tweet-text, .typograp=
hy.editor .markup .tweet .tweet-text { font-size: 14px; line-height: 20px; }=

.typography .markup .twitter-embed .tweet-photos-container.two, .typography.=
editor .markup .twitter-embed .tweet-photos-container.two, .typography .mark=
up .tweet .tweet-photos-container.two, .typography.editor .markup .tweet .tw=
eet-photos-container.two, .typography .markup .twitter-embed .tweet-photos-c=
ontainer.three, .typography.editor .markup .twitter-embed .tweet-photos-cont=
ainer.three, .typography .markup .tweet .tweet-photos-container.three, .typo=
graphy.editor .markup .tweet .tweet-photos-container.three, .typography .mar=
kup .twitter-embed .tweet-photos-container.four, .typography.editor .markup .=
twitter-embed .tweet-photos-container.four, .typography .markup .tweet .twee=
t-photos-container.four, .typography.editor .markup .tweet .tweet-photos-con=
tainer.four { height: 200px; }
.typography .markup .twitter-embed a.expanded-link .expanded-link-img, .typo=
graphy.editor .markup .twitter-embed a.expanded-link .expanded-link-img, .ty=
pography .markup .tweet a.expanded-link .expanded-link-img, .typography.edit=
or .markup .tweet a.expanded-link .expanded-link-img { max-height: 180px; }
.typography .markup .twitter-embed a.expanded-link .expanded-link-descriptio=
n, .typography.editor .markup .twitter-embed a.expanded-link .expanded-link-=
description, .typography .markup .tweet a.expanded-link .expanded-link-descr=
iption, .typography.editor .markup .tweet a.expanded-link .expanded-link-des=
cription { display: none; }
.typography .markup .apple-podcast-container, .typography.editor .markup .ap=
ple-podcast-container { width: unset; }
.typography .markup .install-substack-app-embed img.install-substack-app-emb=
ed-img, .typography.editor .markup .install-substack-app-embed img.install-s=
ubstack-app-embed-img { margin: 0px auto 16px; }
.typography .markup .install-substack-app-embed .install-substack-app-embed-=
text, .typography.editor .markup .install-substack-app-embed .install-substa=
ck-app-embed-text { margin: 0px 0px 12px; max-width: 100%; width: auto; text=
-align: center; }
.typography .markup .install-substack-app-embed .install-substack-app-embed-=
link, .typography.editor .markup .install-substack-app-embed .install-substa=
ck-app-embed-link { display: flex; justify-content: center; }
.share-button-container .separator { display: block; margin: 0px; height: 8p=
x; border-left-width: medium; border-left-style: none; border-left-color: cu=
rrentcolor; }
.share-button-container a.share.first img { padding-left: 0px; }
.header-anchor-parent { display: none; }
.post { padding: 16px 0px 0px; }
.post .post-header .post-label { margin-top: 8px; }
.post .post-header .meta-author-wrap.alternative-meta .meta-right-column .po=
st-meta { margin-top: 6px; }
.post .footer-facepile-container { height: 64px; padding: 0px 16px; display:=
 flex; align-items: center; justify-content: flex-start; width: 100%; }
.post .post-footer.use-separators { justify-content: center; }
.post .post-footer.next-prev { height: 64px; justify-content: space-between;=
 box-sizing: border-box; }
.post-contributor-footer .post-contributor-bio-table { display: block; }
.post-contributor-footer .post-contributor-bio-table-row { display: flex; fl=
ex-direction: row; }
.post-contributor-footer .post-contributor-bio-userhead-cell, .post-contribu=
tor-footer .post-contributor-bio-body-cell { display: block; }
.post-contributor-footer .post-contributor-bio-body-cell { flex-grow: 1; }
.post-contributor-footer .post-contributor-bio-body-table { display: block; }=

.post-contributor-footer .post-contributor-bio-body-table-row { display: blo=
ck; }
.post-contributor-footer .post-contributor-bio-copy-cell, .post-contributor-=
footer .post-contributor-bio-controls-cell { display: block; }
.post-contributor-footer .post-contributor-bio-copy-cell { margin: 0px 0px 1=
6px; }
.post-contributor-footer .post-contributor-bio-controls-cell { width: auto; }=

.post-contributor-footer .post-contributor-bio-controls { margin: auto; }
.post-contributor-footer .post-contributor-bio-controls .button.primary { wi=
dth: 100%; }
.post-contributor-footer .post-contributor-bio-text { font-size: 14px; }
.post-silhouette .post-silhouette-title { margin-top: 10.44225px; height: 12=
0px; }
.post-silhouette .post-silhouette-meta { width: 75%; }
.post-silhouette .post-silhouette-meta.with-byline-image { margin: 20px 0px;=
 }
.use-theme-bg .post-meta.alternative-meta .post-meta-item, .post-meta.altern=
ative-meta .post-meta-item { padding-right: 16px; }
.use-theme-bg .post-meta.alternative-meta .post-meta-item.guest-author-publi=
cation, .post-meta.alternative-meta .post-meta-item.guest-author-publication=
 { display: none; }
.post .floating-subscribe-button { bottom: 20px; right: 20px; }
body .pullquote-align-left, body .pullquote-align-right, body .pullquote-ali=
gn-wide, body .pullquote-align-center { float: none; margin: 0px auto; width=
: 100%; max-width: 100%; }
body { }
body .captioned-image-container figure:has(> a.image2-align-left), body .cap=
tioned-image-container figure:has(> a.image2-align-right) { float: none; mar=
gin: 1em auto; max-width: 100%; width: auto; padding: 0px; }
body .captioned-image-container figure:has(> a.image2-align-left.thefp), bod=
y .captioned-image-container figure:has(> a.image2-align-right.thefp) { marg=
in: 1em auto; }
body .captioned-image-container figure:has(> a.image2-offset-left), body .ca=
ptioned-image-container figure:has(> a.image2-offset-right) { margin: 1em au=
to; }
body .captioned-image-container figure:has(> a.image2-align-left) .image2-in=
set, body .captioned-image-container figure:has(> a.image2-align-right) .ima=
ge2-inset { display: block; justify-content: initial; }
body .markup div.sponsorship-campaign-embed { margin-top: 24px; margin-botto=
m: 24px; }
body .markup div.sponsorship-campaign-embed:first-child { margin-top: 0px; }=

body .markup div.youtube-overlay, body .markup div.vimeo-overlay { display: n=
one !important; }
body .markup div.embedded-publication-wrap .embedded-publication.show-subscr=
ibe { padding: 24px; }
body .markup div.subscription-widget-wrap .subscription-widget.show-subscrib=
e, body .markup div.subscription-widget-wrap-editor .subscription-widget.sho=
w-subscribe, body .markup div.captioned-button-wrap .subscription-widget.sho=
w-subscribe { padding: 0px 24px; }
body .markup div.subscription-widget-wrap .subscription-widget.show-subscrib=
e .subscription-widget-subscribe .button, body .markup div.subscription-widg=
et-wrap-editor .subscription-widget.show-subscribe .subscription-widget-subs=
cribe .button, body .markup div.captioned-button-wrap .subscription-widget.s=
how-subscribe .subscription-widget-subscribe .button { padding: 10px 12px; m=
in-width: 110px; }
body .markup .twitter-embed, body .markup .tweet { padding: 12px; }
body .markup .twitter-embed .tweet-text, body .markup .tweet .tweet-text { f=
ont-size: 14px; line-height: 20px; }
body .markup .twitter-embed .tweet-photos-container.two, body .markup .tweet=
 .tweet-photos-container.two, body .markup .twitter-embed .tweet-photos-cont=
ainer.three, body .markup .tweet .tweet-photos-container.three, body .markup=
 .twitter-embed .tweet-photos-container.four, body .markup .tweet .tweet-pho=
tos-container.four { height: 200px; }
body .markup .twitter-embed a.expanded-link .expanded-link-img, body .markup=
 .tweet a.expanded-link .expanded-link-img { max-height: 180px; }
body .markup .twitter-embed a.expanded-link .expanded-link-description, body=
 .markup .tweet a.expanded-link .expanded-link-description { display: none; }=

body .markup .apple-podcast-container { width: unset; }
body .markup .install-substack-app-embed img.install-substack-app-embed-img {=
 margin: 0px auto 16px; }
body .markup .install-substack-app-embed .install-substack-app-embed-text { m=
argin: 0px 0px 12px; max-width: 100%; width: auto; text-align: center; }
body .markup .install-substack-app-embed .install-substack-app-embed-link { d=
isplay: flex; justify-content: center; }
body .subscription-receipt table:first-of-type .subscription-amount .subscri=
ption-discount { width: 72px !important; }
body .share-button-container .separator { display: block !important; margin:=
 0px !important; height: 8px !important; border-left-width: medium !importan=
t; border-left-style: none !important; border-left-color: currentcolor !impo=
rtant; }
.digest .item .post-meta-item.audience { display: none; }
.comments-page .container .comment-list .collapsed-reply { }
.comment > .comment-list { padding-left: 24px; }
.finish-magic-login-modal .modal-content .container { padding: 24px 0px; }
.reader2-text-b3 { line-height: 24px; }
.reader2-text-h4 { line-height: 24px; }
.subscribe-widget form.form .sideBySideWrap button.rightButton { padding: 10=
px 12px; }
.post-ufi.single-full-width-button .post-ufi-button-wrapper { width: 100%; p=
adding: 16px; }
.post-ufi.single-full-width-button .post-ufi-button-wrapper:empty { display:=
 none; }
.post-ufi.single-full-width-button .post-ufi-button { width: 100%; justify-c=
ontent: center; }
.file-embed-wrapper { padding: 0px; }
.file-embed-wrapper-editor { padding: 0px; }
.file-embed-wrapper-editor:active { padding: 0px; }
.file-embed-button.wide, .file-embed-error-button.wide { display: none; }
.audio-player-wrapper .audio-player .audio-player-progress { border-left-wid=
th: 16px; border-right-width: 16px; }
.audio-player-wrapper .audio-player .audio-player-progress .audio-player-pro=
gress-bar .audio-player-progress-bar-popup { top: -54px; }
.audio-player-wrapper-fancy .audio-player .audio-player-progress { border-le=
ft-width: 16px; border-right-width: 16px; }
.audio-player-wrapper-fancy .audio-player .audio-player-progress .audio-play=
er-progress-bar .audio-player-progress-bar-popup { top: -54px; }
.audio-player-wrapper-fancy .audio-player { padding: 32px; }
.audio-player-wrapper-fancy .audio-player .btn-group { display: flex; }
.audio-player-wrapper-fancy .audio-player .btn-group .button:last-of-type { d=
isplay: block; }
.audio-player-wrapper-fancy .audio-player .btn-group { display: block; }
.audio-player-wrapper-fancy .audio-player .btn-group .button:first-of-type {=
 display: block; }
.audio-player-wrapper-fancy .audio-player .audio-player-substack-logo { disp=
lay: block; }
.audio-player-wrapper-fancy .audio-player .audio-player-title { margin-top: 1=
6px; }
.audio-player-wrapper-fancy .audio-player .audio-player-hero-image-container=
 { padding-top: 15%; width: 15%; display: block; }
.audio-player-wrapper-fancy .audio-player .btn-group .button:first-of-type {=
 display: block; }
.audio-player-wrapper-fancy .audio-player .audio-player-substack-logo { disp=
lay: block; }
.audio-player-wrapper-fancy .audio-player .audio-player-hero-image-container=
 { padding-top: 25%; width: 25%; display: block; }
.audio-player-wrapper-fancy .audio-player .btn-group { display: flex; }
.audio-player-wrapper-fancy .audio-player .btn-group .button:first-of-type {=
 display: block; }
.audio-player-wrapper-fancy .audio-player .btn-group { margin-top: 12px; }
.audio-player-wrapper-fancy .audio-player .btn-group .button { font-size: 13=
px; padding: 6px 12px; height: auto; margin-top: 10px; }
.poll-editor-modal { min-width: calc(100% - 20px); }
.poll-embed .poll-anchor-target .poll-anchor-copy-button { left: 8px; top: 4=
5px; }</style><img src=3D"https://eotrx.substackcdn.com/open?token=3DeyJtIjo=
iPDIwMjYwMzE3MTUzMDQ0LjMuMmEzZjkyMmZlNDY2NTIxMEBtZy1kMC5zdWJzdGFjay5jb20-Iiw=
idSI6MjczNjIyMzk4LCJyIjoidGpwaHVoc0BnbWFpbC5jb20iLCJkIjoibWctZDAuc3Vic3RhY2s=
uY29tIiwicCI6MTkwMTU5MzQ3LCJ0IjoibmV3c2xldHRlciIsImEiOiJldmVyeW9uZSIsInMiOjg=
xNzEzMiwiYyI6InBvc3QiLCJmIjp0cnVlLCJwb3NpdGlvbiI6InRvcCIsImlhdCI6MTc3Mzc2MjE=
5NCwiZXhwIjoxNzc2MzU0MTk0LCJpc3MiOiJwdWItMCIsInN1YiI6ImVvIn0.sjaj4tfc0RSfE99=
Bx8ONoPirSz9DEm_NcziyRBoXmfs" alt=3D"" width=3D"1" height=3D"1" border=3D"0"=
 style=3D"height:1px !important;width:1px !important;border-width:0 !importa=
nt;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !import=
ant;margin-left:0 !important;padding-top:0 !important;padding-bottom:0 !impo=
rtant;padding-right:0 !important;padding-left:0 !important;" data-unique-ide=
ntifier=3D""><div class=3D"preview" style=3D"display:none;font-size:1px;colo=
r:#333333;line-height:1px;max-height:0px;max-width:0px;opacity:0;overflow:hi=
dden;">In this article, we will look at the breakdown of this migration, the=
 challenges the engineering team faced, and how they achieved their goal of a=
 successful migration.</div><div class=3D"preview" style=3D"display:none;fon=
t-size:1px;color:#333333;line-height:1px;max-height:0px;max-width:0px;opacit=
y:0;overflow:hidden;">=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=
=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp;=
 =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=
=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=
=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=
=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=
=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F=
 &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87=
 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &n=
bsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=
=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp;=
 =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=
=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=
=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=
=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=
=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F=
 &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87=
 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &n=
bsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=
=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp;=
 =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=
=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=
=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=
=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=
=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F=
 &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87=
 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &n=
bsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=
=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp;=
 =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=
=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=
=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=
=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=
=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F=
 &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87=
 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &n=
bsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=
=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp;=
 =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=
=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=
=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=
=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=
=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F=
 &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87=
 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &n=
bsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=
=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp;=
 =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=
=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=
=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=
=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=
=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F=
 &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87=
 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &n=
bsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=
=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp;=
 =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=
=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=
=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=
=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=
=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F=
 &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87=
 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &n=
bsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=
=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp;=
 =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=
=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=
=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=
=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=
=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F=
 &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87=
 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &n=
bsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=
=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp;=
 =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=
=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=
=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=
=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD=CD=8F &nbsp; =E2=80=
=87 =C2=AD=CD=8F &nbsp; =E2=80=87 =C2=AD</div><table class=3D"email-body-con=
tainer" role=3D"presentation" width=3D"100%" border=3D"0" cellspacing=3D"0" c=
ellpadding=3D"0"><tbody><tr><td></td><td class=3D"content" width=3D"550"></t=
d><td></td></tr><tr><td></td><td class=3D"content" width=3D"550" align=3D"le=
ft"><div style=3D"font-size: 16px;line-height: 26px;max-width: 550px;width: 1=
00%;margin: 0 auto;overflow-wrap: break-word;"><table role=3D"presentation" w=
idth=3D"100%" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><t=
d align=3D"right" style=3D"height:20px;"><table role=3D"presentation" width=3D=
"auto" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td style=
=3D"vertical-align:middle;"><span class=3D"pencraft pc-reset reset-IxiVJZ tw=
-font-body tw-text-ssm tw-text-substack-secondary" style=3D"font-family: SF P=
ro Text, -apple-system, system-ui, BlinkMacSystemFont, Inter, Segoe UI, Robo=
to, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe U=
I Symbol;font-size: 13px;color: unset;list-style: none;text-decoration: unse=
t;margin: 0;"><div class=3D"pencraft pc-reset align-right-VJbKw5 size-12-mmZ=
61m reset-IxiVJZ" style=3D"list-style: none;color: unset;text-align: right;f=
ont-size: 12px;line-height: 16px;text-decoration: unset;margin: 0;"><span cl=
ass=3D"pencraft pc-reset reset-IxiVJZ" translated=3D"" style=3D"list-style: n=
one;color: unset;text-decoration: unset;margin: 0;">Forwarded this email? <a=
 class=3D"pencraft pc-reset decoration-underline-ClTkYc reset-IxiVJZ" href=3D=
"https://substack.com/redirect/2/eyJlIjoiaHR0cHM6Ly9ibG9nLmJ5dGVieXRlZ28uY29=
tL3N1YnNjcmliZT91dG1fc291cmNlPWVtYWlsJnV0bV9jYW1wYWlnbj1lbWFpbC1zdWJzY3JpYmU=
mcj00aXdvZTYmbmV4dD1odHRwcyUzQSUyRiUyRmJsb2cuYnl0ZWJ5dGVnby5jb20lMkZwJTJGaG9=
3LXJlZGRpdC1taWdyYXRlZC1wZXRhYnl0ZS1zY2FsZSIsInAiOjE5MDE1OTM0NywicyI6ODE3MTM=
yLCJmIjp0cnVlLCJ1IjoyNzM2MjIzOTgsImlhdCI6MTc3Mzc2MjE5MywiZXhwIjoyMDg5MzM4MTk=
zLCJpc3MiOiJwdWItMCIsInN1YiI6ImxpbmstcmVkaXJlY3QifQ.kTcMcJsIzsBWXmH9U1PL97GM=
pJd_d5a_T35bPVMZR4w?" style=3D"list-style: none;color: unset;text-decoration=
: unset;margin: 0;-webkit-text-decoration-line: underline;text-decoration-li=
ne: underline;">Subscribe here</a> for more</span></div></span></td></tr></t=
body></table></td></tr></tbody></table><div class=3D"post typography" dir=3D=
"auto" style=3D"--image-offset-margin: -120px;padding: 32px 0 0 0;font-size:=
 16px;line-height: 26px;"><div class=3D"post-header" role=3D"region" aria-la=
bel=3D"Post header" style=3D"font-size: 16px;line-height: 26px;"><h1 class=3D=
"post-title published title-X77sOw" dir=3D"auto" style=3D"direction: auto;te=
xt-align: start;unicode-bidi: isolate;color: rgb(54,55,55);font-family: 'SF P=
ro Display',-apple-system-headline,system-ui,-apple-system,BlinkMacSystemFon=
t,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI=
 Emoji','Segoe UI Symbol';font-weight: bold;-webkit-font-smoothing: antialia=
sed;-moz-osx-font-smoothing: antialiased;-webkit-appearance: optimizelegibil=
ity;-moz-appearance: optimizelegibility;appearance: optimizelegibility;margi=
n: 0;line-height: 36px;font-size: 32px;"><a href=3D"https://substack.com/app=
-link/post?publication_id=3D817132&amp;post_id=3D190159347&amp;utm_source=3D=
post-email-title&amp;utm_campaign=3Demail-post-title&amp;isFreemail=3Dtrue&a=
mp;r=3D4iwoe6&amp;token=3DeyJ1c2VyX2lkIjoyNzM2MjIzOTgsInBvc3RfaWQiOjE5MDE1OT=
M0NywiaWF0IjoxNzczNzYyMTkzLCJleHAiOjE3NzYzNTQxOTMsImlzcyI6InB1Yi04MTcxMzIiLC=
JzdWIiOiJwb3N0LXJlYWN0aW9uIn0.0WltCugqafQTWZLqDoTFlE0r716VEFnBK1pdn9-CcCI" s=
tyle=3D"color: rgb(54,55,55);text-decoration: none;">How Reddit Migrated Pet=
abyte-Scale Kafka from EC2 to Kubernetes</a></h1><table class=3D"post-meta" r=
ole=3D"presentation" width=3D"100%" border=3D"0" cellspacing=3D"0" cellpaddi=
ng=3D"0" style=3D"margin: 1em 0;height: 20px;align-items: center;"><tbody><t=
r><td><table role=3D"presentation" width=3D"auto" border=3D"0" cellspacing=3D=
"0" cellpadding=3D"0"><tbody><tr><td><table role=3D"presentation" width=3D"a=
uto" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td style=3D=
"vertical-align:middle;"><div class=3D"pencraft pc-reset color-primary-zABaz=
T line-height-20-t4M0El font-meta-MWBumP size-11-NuY2Zx weight-medium-fw81nC=
 transform-uppercase-yKDgcq reset-IxiVJZ meta-EgzBVA custom-css-email-post-a=
uthor" style=3D"list-style: none;font-size: 11px;line-height: 20px;text-deco=
ration: unset;color: rgb(54,55,55);margin: 0;font-family: 'SF Compact',-appl=
e-system,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvet=
ica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';=
font-weight: 500;text-transform: uppercase;letter-spacing: .2px;"><a class=3D=
"pencraft pc-reset color-primary-zABazT line-height-20-t4M0El font-meta-MWBu=
mP size-11-NuY2Zx weight-medium-fw81nC transform-uppercase-yKDgcq reset-IxiV=
JZ meta-EgzBVA" style=3D"list-style: none;color: rgb(54,55,55);margin: 0;fon=
t-size: 11px;line-height: 20px;font-family: 'SF Compact',-apple-system,syste=
m-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans=
-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-weight: 5=
00;text-transform: uppercase;letter-spacing: .2px;text-decoration: none" hre=
f=3D"https://substack.com/@bytebytego399569">ByteByteGo</a></div></td></tr><=
/tbody></table></td></tr><tr><td><table role=3D"presentation" width=3D"auto"=
 border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td style=3D"ve=
rtical-align:middle;"><div class=3D"pencraft pc-reset color-secondary-ls1g8s=
 line-height-20-t4M0El font-meta-MWBumP size-11-NuY2Zx weight-medium-fw81nC t=
ransform-uppercase-yKDgcq reset-IxiVJZ meta-EgzBVA" style=3D"list-style: non=
e;font-size: 11px;line-height: 20px;text-decoration: unset;color: rgb(119,11=
9,119);margin: 0;font-family: 'SF Compact',-apple-system,system-ui,-apple-sy=
stem,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple C=
olor Emoji','Segoe UI Emoji','Segoe UI Symbol';font-weight: 500;text-transfo=
rm: uppercase;letter-spacing: .2px;"><time datetime=3D"2026-03-17T15:30:44.1=
53Z">Mar 17</time></div></td></tr></tbody></table></td></tr></tbody></table>=
</td><td align=3D"right"><table role=3D"presentation" width=3D"auto" border=3D=
"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td style=3D"vertical-ali=
gn:middle;"><a href=3D"https://substack.com/@bytebytego399569"><img class=3D=
"custom-css-email-avatar avatar-QIQ5yR" src=3D"https://substackcdn.com/image=
/fetch/$s_!U1Ej!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubst=
ack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9941c68-e5b7-4b93-be75-=
df7cc4ffef02_504x540.png" style=3D"box-sizing: border-box;max-width: 550px;b=
order: none;vertical-align: middle;width: 40px;height: 40px;min-width: 40px;=
min-height: 40px;object-fit: cover;margin: 0px;display: inline;border-radius=
: 50%" width=3D"40" height=3D"40" data-unique-identifier=3D""></a></td></tr>=
</tbody></table></td></tr></tbody></table><table class=3D"email-ufi-2-top" r=
ole=3D"presentation" width=3D"100%" border=3D"0" cellspacing=3D"0" cellpaddi=
ng=3D"0" style=3D"border-top: 1px solid rgb(0,0,0,.1);border-bottom: 1px sol=
id rgb(0,0,0,.1);min-width: 100%;"><tbody><tr height=3D"16"><td height=3D"16=
" style=3D"font-size:0px;line-height:0;">&nbsp;</td></tr><tr><td><table role=
=3D"presentation" width=3D"100%" border=3D"0" cellspacing=3D"0" cellpadding=3D=
"0"><tbody><tr><td><table role=3D"presentation" width=3D"auto" border=3D"0" c=
ellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td style=3D"vertical-align:mi=
ddle;"><table role=3D"presentation" width=3D"38" border=3D"0" cellspacing=3D=
"0" cellpadding=3D"0"><tbody><tr><td align=3D"center"><a class=3D"email-icon=
-button" href=3D"https://substack.com/app-link/post?publication_id=3D817132&=
amp;post_id=3D190159347&amp;utm_source=3Dsubstack&amp;isFreemail=3Dtrue&amp;=
submitLike=3Dtrue&amp;token=3DeyJ1c2VyX2lkIjoyNzM2MjIzOTgsInBvc3RfaWQiOjE5MD=
E1OTM0NywicmVhY3Rpb24iOiLinaQiLCJpYXQiOjE3NzM3NjIxOTMsImV4cCI6MTc3NjM1NDE5My=
wiaXNzIjoicHViLTgxNzEzMiIsInN1YiI6InJlYWN0aW9uIn0.YoecT2aUzvb6Hdxe5EnrLOnBux=
T1TsCf8L6mbBF0UJA&amp;utm_medium=3Demail&amp;utm_campaign=3Demail-reaction&a=
mp;r=3D4iwoe6" style=3D"font-family: system-ui,-apple-system,BlinkMacSystemFo=
nt,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe U=
I Emoji','Segoe UI Symbol';display: inline-block;font-weight: 500;border: 1p=
x solid rgb(0,0,0,.1);border-radius: 9999px;text-transform: uppercase;font-s=
ize: 12px;line-height: 1;padding: 9px 0;text-decoration: none;color: rgb(119=
,119,119);min-width: 38px;box-sizing: border-box;width: 38px"><img class=3D"=
icon" src=3D"https://substackcdn.com/image/fetch/$s_!PeVs!,w_36,c_scale,f_pn=
g,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2Ficon%2FLucid=
eHeart%3Fv%3D4%26height%3D36%26fill%3Dnone%26stroke%3D%2523808080%26strokeWi=
dth%3D2" width=3D"18" height=3D"18" style=3D"border: none;vertical-align: mi=
ddle;max-width: 18px" alt=3D"" data-unique-identifier=3D""></a></td></tr></t=
body></table></td><td width=3D"8" style=3D"min-width:8px;"></td><td style=3D=
"vertical-align:middle;"><table role=3D"presentation" width=3D"38" border=3D=
"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td align=3D"center"><a c=
lass=3D"email-icon-button" href=3D"https://substack.com/app-link/post?public=
ation_id=3D817132&amp;post_id=3D190159347&amp;utm_source=3Dsubstack&amp;utm_=
medium=3Demail&amp;isFreemail=3Dtrue&amp;comments=3Dtrue&amp;token=3DeyJ1c2V=
yX2lkIjoyNzM2MjIzOTgsInBvc3RfaWQiOjE5MDE1OTM0NywiaWF0IjoxNzczNzYyMTkzLCJleHA=
iOjE3NzYzNTQxOTMsImlzcyI6InB1Yi04MTcxMzIiLCJzdWIiOiJwb3N0LXJlYWN0aW9uIn0.0Wl=
tCugqafQTWZLqDoTFlE0r716VEFnBK1pdn9-CcCI&amp;r=3D4iwoe6&amp;utm_campaign=3De=
mail-half-magic-comments&amp;action=3Dpost-comment&amp;utm_source=3Dsubstack=
&amp;utm_medium=3Demail" style=3D"font-family: system-ui,-apple-system,Blink=
MacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoj=
i','Segoe UI Emoji','Segoe UI Symbol';display: inline-block;font-weight: 500=
;border: 1px solid rgb(0,0,0,.1);border-radius: 9999px;text-transform: upper=
case;font-size: 12px;line-height: 1;padding: 9px 0;text-decoration: none;col=
or: rgb(119,119,119);min-width: 38px;box-sizing: border-box;width: 38px"><im=
g class=3D"icon" src=3D"https://substackcdn.com/image/fetch/$s_!x1tS!,w_36,c=
_scale,f_png,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2Fi=
con%2FLucideComments%3Fv%3D4%26height%3D36%26fill%3Dnone%26stroke%3D%2523808=
080%26strokeWidth%3D2" width=3D"18" height=3D"18" style=3D"border: none;vert=
ical-align: middle;max-width: 18px" alt=3D"" data-unique-identifier=3D""></a=
></td></tr></tbody></table></td><td width=3D"8" style=3D"min-width:8px;"></t=
d><td style=3D"vertical-align:middle;"><table role=3D"presentation" width=3D=
"38" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td align=3D=
"center"><a class=3D"email-icon-button" href=3D"https://substack.com/app-lin=
k/post?publication_id=3D817132&amp;post_id=3D190159347&amp;utm_source=3Dsubs=
tack&amp;utm_medium=3Demail&amp;utm_content=3Dshare&amp;utm_campaign=3Demail=
-share&amp;action=3Dshare&amp;triggerShare=3Dtrue&amp;isFreemail=3Dtrue&amp;=
r=3D4iwoe6&amp;token=3DeyJ1c2VyX2lkIjoyNzM2MjIzOTgsInBvc3RfaWQiOjE5MDE1OTM0N=
ywiaWF0IjoxNzczNzYyMTkzLCJleHAiOjE3NzYzNTQxOTMsImlzcyI6InB1Yi04MTcxMzIiLCJzd=
WIiOiJwb3N0LXJlYWN0aW9uIn0.0WltCugqafQTWZLqDoTFlE0r716VEFnBK1pdn9-CcCI" styl=
e=3D"font-family: system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Robo=
to,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI=
 Symbol';display: inline-block;font-weight: 500;border: 1px solid rgb(0,0,0,=
.1);border-radius: 9999px;text-transform: uppercase;font-size: 12px;line-hei=
ght: 1;padding: 9px 0;text-decoration: none;color: rgb(119,119,119);min-widt=
h: 38px;box-sizing: border-box;width: 38px"><img class=3D"icon" src=3D"https=
://substackcdn.com/image/fetch/$s_!_L14!,w_36,c_scale,f_png,q_auto:good,fl_p=
rogressive:steep/https%3A%2F%2Fsubstack.com%2Ficon%2FLucideShare2%3Fv%3D4%26=
height%3D36%26fill%3Dnone%26stroke%3D%2523808080%26strokeWidth%3D2" width=3D=
"18" height=3D"18" style=3D"border: none;vertical-align: middle;max-width: 1=
8px" alt=3D"" data-unique-identifier=3D""></a></td></tr></tbody></table></td=
><td width=3D"8" style=3D"min-width:8px;"></td><td style=3D"vertical-align:m=
iddle;"><table role=3D"presentation" width=3D"38" border=3D"0" cellspacing=3D=
"0" cellpadding=3D"0"><tbody><tr><td align=3D"center"><a class=3D"email-icon=
-button" href=3D"https://substack.com/redirect/2/eyJlIjoiaHR0cHM6Ly9vcGVuLnN=
1YnN0YWNrLmNvbS9wdWIvYnl0ZWJ5dGVnby9wL2hvdy1yZWRkaXQtbWlncmF0ZWQtcGV0YWJ5dGU=
tc2NhbGU_dXRtX3NvdXJjZT1zdWJzdGFjayZ1dG1fbWVkaXVtPWVtYWlsJnV0bV9jYW1wYWlnbj1=
lbWFpbC1yZXN0YWNrLWNvbW1lbnQmYWN0aW9uPXJlc3RhY2stY29tbWVudCZyPTRpd29lNiZ0b2t=
lbj1leUoxYzJWeVgybGtJam95TnpNMk1qSXpPVGdzSW5CdmMzUmZhV1FpT2pFNU1ERTFPVE0wTnl=
3aWFXRjBJam94Tnpjek56WXlNVGt6TENKbGVIQWlPakUzTnpZek5UUXhPVE1zSW1semN5STZJbkI=
xWWkwNE1UY3hNeklpTENKemRXSWlPaUp3YjNOMExYSmxZV04wYVc5dUluMC4wV2x0Q3VncWFmUVR=
XWkxxRG9URmxFMHI3MTZWRUZuQksxcGRuOS1DY0NJIiwicCI6MTkwMTU5MzQ3LCJzIjo4MTcxMzI=
sImYiOnRydWUsInUiOjI3MzYyMjM5OCwiaWF0IjoxNzczNzYyMTkzLCJleHAiOjIwODkzMzgxOTM=
sImlzcyI6InB1Yi0wIiwic3ViIjoibGluay1yZWRpcmVjdCJ9.bGdfyJK3WU2__x3MJhiqOLUdzK=
ulsHIVwnD3DAxw4uM?&amp;utm_source=3Dsubstack&amp;utm_medium=3Demail" style=3D=
"font-family: system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,H=
elvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Sym=
bol';display: inline-block;font-weight: 500;border: 1px solid rgb(0,0,0,.1);=
border-radius: 9999px;text-transform: uppercase;font-size: 12px;line-height:=
 1;padding: 9px 0;text-decoration: none;color: rgb(119,119,119);min-width: 3=
8px;box-sizing: border-box;width: 38px"><img class=3D"icon" src=3D"https://s=
ubstackcdn.com/image/fetch/$s_!5EGt!,w_36,c_scale,f_png,q_auto:good,fl_progr=
essive:steep/https%3A%2F%2Fsubstack.com%2Ficon%2FNoteForwardIcon%3Fv%3D4%26h=
eight%3D36%26fill%3Dnone%26stroke%3D%2523808080%26strokeWidth%3D2" width=3D"=
18" height=3D"18" style=3D"border: none;vertical-align: middle;max-width: 18=
px" alt=3D"" data-unique-identifier=3D""></a></td></tr></tbody></table></td>=
</tr></tbody></table></td><td align=3D"right"><table role=3D"presentation" w=
idth=3D"auto" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><t=
d style=3D"vertical-align:middle;"><table role=3D"presentation" width=3D"aut=
o" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td align=3D"=
center"><a class=3D"email-button-outline" href=3D"https://open.substack.com/=
pub/bytebytego/p/how-reddit-migrated-petabyte-scale?utm_source=3Demail&amp;r=
edirect=3Dapp-store&amp;utm_campaign=3Demail-read-in-app" style=3D"font-fami=
ly: system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,A=
rial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';displ=
ay: inline-block;font-weight: 500;border: 1px solid rgb(0,0,0,.1);border-rad=
ius: 9999px;text-transform: uppercase;font-size: 12px;line-height: 12px;padd=
ing: 9px 14px;text-decoration: none;color: rgb(119,119,119);"><div class=3D"=
email-button-spacer" style=3D"font-size: 16px;line-height: 26px;display: inl=
ine-block;vertical-align: middle;max-width: 0;min-height: 18px;"></div><span=
 class=3D"email-button-text" style=3D"vertical-align: middle;margin-right: 4=
px">READ IN APP</span><img class=3D"icon text-icon" src=3D"https://substackc=
dn.com/image/fetch/$s_!ET-_!,w_36,c_scale,f_png,q_auto:good,fl_progressive:s=
teep/https%3A%2F%2Fsubstack.com%2Ficon%2FLucideArrowUpRight%3Fv%3D4%26height=
%3D36%26fill%3Dnone%26stroke%3D%2523808080%26strokeWidth%3D2" width=3D"18" h=
eight=3D"18" style=3D"min-width: 18px;min-height: 18px;border: none;vertical=
-align: middle;margin-right: 0;margin-left: 0;max-width: 18px" alt=3D"" data=
-unique-identifier=3D""></a></td></tr></tbody></table></td></tr></tbody></ta=
ble></td></tr></tbody></table></td></tr><tr height=3D"16"><td height=3D"16" s=
tyle=3D"font-size:0px;line-height:0;">&nbsp;</td></tr></tbody></table></div>=
</div><div class=3D"post typography" dir=3D"auto" style=3D"--image-offset-ma=
rgin: -120px;padding: 32px 0 0 0;font-size: 16px;line-height: 26px;"><div cl=
ass=3D"body markup" dir=3D"auto" style=3D"text-align: initial;font-size: 16p=
x;line-height: 26px;width: 100%;word-break: break-word;margin-bottom: 16px;"=
><h2 class=3D"header-anchor-post" style=3D"position: relative;font-family: '=
SF Pro Display',-apple-system-headline,system-ui,-apple-system,BlinkMacSyste=
mFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Sego=
e UI Emoji','Segoe UI Symbol';font-weight: bold;-webkit-font-smoothing: anti=
aliased;-moz-osx-font-smoothing: antialiased;-webkit-appearance: optimizeleg=
ibility;-moz-appearance: optimizelegibility;appearance: optimizelegibility;m=
argin: 1em 0 0.625em 0;color: rgb(54,55,55);line-height: 1.16em;font-size: 1=
.625em;margin-top: 0;"><strong><a href=3D"https://substack.com/redirect/333d=
e563-5e3d-452d-a35e-fe57755e958a?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0=
krRXGMy3p768BWtuZifRB-Zs" rel=3D"" style=3D"color: rgb(54,55,55);text-decora=
tion: underline;">Cut Code Review Time &amp; Bugs in Half (Sponsored)</a></s=
trong></h2><div class=3D"captioned-image-container-static" style=3D"font-siz=
e: 16px;line-height: 26px;margin: 32px auto;"><figure style=3D"width: 100%;m=
argin: 0 auto;"><table class=3D"image-wrapper" width=3D"100%" border=3D"0" c=
ellspacing=3D"0" cellpadding=3D"0" data-component-name=3D"Image2ToDOMStatic"=
 style=3D"mso-padding-alt: 1em 0 1.6em;"><tbody><tr><td style=3D"text-align:=
 center;"></td><td class=3D"content" align=3D"left" width=3D"724" style=3D"t=
ext-align: center;"><a class=3D"image-link" target=3D"_blank" href=3D"https:=
//substack.com/redirect/333de563-5e3d-452d-a35e-fe57755e958a?j=3DeyJ1IjoiNGl=
3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" rel=3D"" style=3D"posi=
tion: relative;flex-direction: column;align-items: center;padding: 0;width: a=
uto;height: auto;border: none;text-decoration: none;display: block;margin: 0=
;"><img class=3D"wide-image" data-attrs=3D"{&quot;src&quot;:&quot;https://su=
bstack-post-media.s3.amazonaws.com/public/images/7591b803-4cc8-4604-9ce8-7d8=
7828ed1ac_1600x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscree=
n&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&q=
uot;:1456,&quot;resizeWidth&quot;:724,&quot;bytes&quot;:null,&quot;alt&quot;=
:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:=
&quot;https://go.bytebytego.com/coderabbit_031726&quot;,&quot;belowTheFold&q=
uot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot=
;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" a=
lt=3D"" title=3D"" width=3D"550" height=3D"275" src=3D"https://substackcdn.c=
om/image/fetch/$s_!Fkc-!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:st=
eep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7=
591b803-4cc8-4604-9ce8-7d87828ed1ac_1600x800.png" style=3D"border: none !imp=
ortant;vertical-align: middle;display: block;-ms-interpolation-mode: bicubic=
;height: auto;margin-bottom: 0;width: auto !important;max-width: 100% !impor=
tant;margin: 0 auto;" data-unique-identifier=3D""></a></td><td style=3D"text=
-align: center;"></td></tr></tbody></table></figure></div><p style=3D"margin=
: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;">Code r=
eviews are critical but time-consuming. CodeRabbit acts as your AI co-pilot,=
 providing instant Code review comments and potential impacts of every pull r=
equest.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 2=
6px;font-size: 16px;">Beyond just flagging issues, CodeRabbit provides one-c=
lick fix suggestions and lets you define custom code quality rules using AST=
 Grep patterns, catching subtle issues that traditional static analysis tool=
s might miss.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-he=
ight: 26px;font-size: 16px;">CodeRabbit reviews 1 million PRs every week acr=
oss 3 million repositories and is used by 100 thousand Open-source projects.=
</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;fo=
nt-size: 16px;">CodeRabbit is free for all open-source repo=E2=80=99s.</p><p=
 class=3D"button-wrapper" data-attrs=3D"{&quot;url&quot;:&quot;https://go.by=
tebytego.com/coderabbit_031726&quot;,&quot;text&quot;:&quot;Get Started Toda=
y&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name=
=3D"ButtonCreateButton" style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);lin=
e-height: 26px;font-size: 16px;text-align: center;cursor: pointer;border-rad=
ius: 4px;"><a class=3D"button primary" href=3D"https://substack.com/redirect=
/333de563-5e3d-452d-a35e-fe57755e958a?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kf=
damY0krRXGMy3p768BWtuZifRB-Zs" rel=3D"" style=3D"font-family: system-ui,-app=
le-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'A=
pple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';display: inline-block;b=
ox-sizing: border-box;cursor: pointer;border: none;border-radius: 8px;font-s=
ize: 14px;line-height: 20px;font-weight: 600;text-align: center;margin: 0;op=
acity: 1;outline: none;white-space: nowrap;color: #ffffff !important;text-de=
coration: none !important;background-color: #7756e3;padding: 12px 20px;heigh=
t: auto;"><span style=3D"color: #ffffff;text-decoration: none;">Get Started T=
oday</span></a></p><div style=3D"font-size: 16px;line-height: 26px;"><hr sty=
le=3D"margin: 32px 0;padding: 0;height: 1px;background: rgb(0,0,0,.1);border=
: none;"></div><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-heig=
ht: 26px;font-size: 16px;">The Reddit Engineering Team completed one of the m=
ost demanding infrastructure migrations in the company=E2=80=99s history. It=
 moved its entire Apache Kafka fleet, comprising over 500 brokers and more t=
han a petabyte of live data, from Amazon EC2 virtual machines onto Kubernete=
s.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;=
font-size: 16px;">The migration was done with zero downtime and without aski=
ng a single client application to change how it connected to Kafka.</p><p st=
yle=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 1=
6px;">In this article, we will look at the breakdown of this migration, the c=
hallenges the engineering team faced, and how they achieved their goal of a s=
uccessful migration.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);=
line-height: 26px;font-size: 16px;"><em>Disclaimer: This post is based on pu=
blicly shared details from the Reddit Engineering Team. Please comment if yo=
u notice any inaccuracies.</em></p><h2 class=3D"header-anchor-post" style=3D=
"position: relative;font-family: 'SF Pro Display',-apple-system-headline,sys=
tem-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sa=
ns-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-weight:=
 bold;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: antialias=
ed;-webkit-appearance: optimizelegibility;-moz-appearance: optimizelegibilit=
y;appearance: optimizelegibility;margin: 1em 0 0.625em 0;color: rgb(54,55,55=
);line-height: 1.16em;font-size: 1.625em;">The Role of Kafka at Reddit</h2><=
p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-si=
ze: 16px;">To put things into perspective, let us first understand what exac=
tly Apache Kafka is.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);=
line-height: 26px;font-size: 16px;">Apache Kafka is an open-source message s=
treaming platform. Applications called producers write messages into Kafka p=
artitions, and other applications called consumers read those messages out. K=
afka sits in the middle and stores those messages reliably, even if the prod=
ucer and consumer are running at completely different times. A single Kafka s=
erver is called a broker, whereas a collection of brokers working together f=
orms a cluster.</p><div class=3D"captioned-image-container-static" style=3D"=
font-size: 16px;line-height: 26px;margin: 32px auto;"><figure style=3D"width=
: 100%;margin: 0 auto;"><table class=3D"image-wrapper" width=3D"100%" border=
=3D"0" cellspacing=3D"0" cellpadding=3D"0" data-component-name=3D"Image2ToDO=
MStatic" style=3D"mso-padding-alt: 1em 0 1.6em;"><tbody><tr><td style=3D"tex=
t-align: center;"></td><td class=3D"content" align=3D"left" width=3D"1456" s=
tyle=3D"text-align: center;"><a class=3D"image-link" target=3D"_blank" href=3D=
"https://substack.com/redirect/5bac144d-3939-4d27-8b72-8ff538279cf6?j=3DeyJ1=
IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" rel=3D"" style=3D=
"position: relative;flex-direction: column;align-items: center;padding: 0;wi=
dth: auto;height: auto;border: none;text-decoration: none;display: block;mar=
gin: 0;"><img class=3D"wide-image" data-attrs=3D"{&quot;src&quot;:&quot;http=
s://substack-post-media.s3.amazonaws.com/public/images/6db6e1df-da34-4691-a8=
a1-3f63195b4f03_2806x1396.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fu=
llscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:724,&quot;=
width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:103618,&quot=
;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot=
;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:f=
alse,&quot;internalRedirect&quot;:&quot;https://blog.bytebytego.com/i/190159=
347?img=3Dhttps%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimag=
es%2F6db6e1df-da34-4691-a8a1-3f63195b4f03_2806x1396.png&quot;,&quot;isProces=
sing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" alt=3D"" w=
idth=3D"550" height=3D"273.489010989011" src=3D"https://substackcdn.com/imag=
e/fetch/$s_!FPW2!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:steep/htt=
ps%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6db6e1df=
-da34-4691-a8a1-3f63195b4f03_2806x1396.png" style=3D"border: none !important=
;vertical-align: middle;display: block;-ms-interpolation-mode: bicubic;heigh=
t: auto;margin-bottom: 0;width: auto !important;max-width: 100% !important;m=
argin: 0 auto;" data-unique-identifier=3D""></a></td><td style=3D"text-align=
: center;"></td></tr></tbody></table></figure></div><p style=3D"margin: 0 0 2=
0px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;">At Reddit, Ap=
ache Kafka is not a peripheral tool. It sits underneath hundreds of business=
-critical services, processing tens of millions of messages every second. If=
 Kafka went down, large portions of Reddit would break.</p><h2 class=3D"head=
er-anchor-post" style=3D"position: relative;font-family: 'SF Pro Display',-a=
pple-system-headline,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',R=
oboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe=
 UI Symbol';font-weight: bold;-webkit-font-smoothing: antialiased;-moz-osx-f=
ont-smoothing: antialiased;-webkit-appearance: optimizelegibility;-moz-appea=
rance: optimizelegibility;appearance: optimizelegibility;margin: 1em 0 0.625=
em 0;color: rgb(54,55,55);line-height: 1.16em;font-size: 1.625em;">Why Reddi=
t Wanted to Move Away from EC2</h2><p style=3D"margin: 0 0 20px 0;color: rgb=
(54,55,55);line-height: 26px;font-size: 16px;">Before the migration, Reddit m=
anaged its Kafka brokers on Amazon EC2 instances using a combination of Terr=
aform, Puppet, and custom scripts. Operators handled upgrades, configuration=
 changes, and machine replacements by running commands directly from their l=
aptops. This worked fine until a certain point. However, as the fleet grew, i=
t became increasingly slow, error-prone, and expensive. Reddit needed a more=
 scalable and reliable way to operate Kafka.</p><p style=3D"margin: 0 0 20px=
 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;">Kubernetes, pair=
ed with a tool called Strimzi, offered that path.</p><p style=3D"margin: 0 0=
 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;">Kubernetes i=
s an open-source platform for running and managing containerized application=
s. Instead of manually provisioning and maintaining individual servers, Kube=
rnetes lets developers describe what should be running and handles deploymen=
t, scaling, and recovery automatically. Strimzi, on the other hand, is a pro=
ject under the Cloud Native Computing Foundation that specifically lets you r=
un Kafka on Kubernetes. It provides a declarative way to manage Kafka cluste=
rs. This means that developers can describe what they want in a configuratio=
n file, and Strimzi handles deployment, upgrades, and maintenance. This prom=
ised fewer manual interventions and more predictable operations.</p><h2 clas=
s=3D"header-anchor-post" style=3D"position: relative;font-family: 'SF Pro Di=
splay',-apple-system-headline,system-ui,-apple-system,BlinkMacSystemFont,'Se=
goe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoj=
i','Segoe UI Symbol';font-weight: bold;-webkit-font-smoothing: antialiased;-=
moz-osx-font-smoothing: antialiased;-webkit-appearance: optimizelegibility;-=
moz-appearance: optimizelegibility;appearance: optimizelegibility;margin: 1e=
m 0 0.625em 0;color: rgb(54,55,55);line-height: 1.16em;font-size: 1.625em;">=
The Four Constraints That Shaped the Migration</h2><p style=3D"margin: 0 0 2=
0px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;">Reddit did no=
t jump straight into moving brokers. Before writing a single line of migrati=
on code, Reddit identified four hard constraints that ruled out entire categ=
ories of approaches. The constraints are as follows:</p><ul style=3D"margin-=
top: 0;padding: 0;"><li style=3D"margin: 8px 0 0 32px;mso-special-format: bu=
llet;"><p style=3D"color: rgb(54,55,55);line-height: 26px;margin-bottom: 0;b=
ox-sizing: border-box;padding-left: 4px;font-size: 16px;margin: 0;">Kafka ha=
d to stay up. There was no acceptable maintenance window. Downtime, data los=
s, or forcing client applications to change their configuration was not an o=
ption. This ruled out scheduled cutovers, dual-write strategies, and replay-=
based migrations.</p></li><li style=3D"margin: 8px 0 0 32px;mso-special-form=
at: bullet;"><p style=3D"color: rgb(54,55,55);line-height: 26px;margin-botto=
m: 0;box-sizing: border-box;padding-left: 4px;font-size: 16px;margin: 0;">Ka=
fka=E2=80=99s metadata could not be rebuilt from scratch. Apache Kafka maint=
ains a detailed internal state called metadata. This includes information ab=
out which brokers exist, which broker holds which data, and where replicas o=
f that data are stored. ZooKeeper, an external service, was responsible for m=
anaging this metadata. There is no supported way to recreate this metadata o=
n a fresh cluster while keeping the system available. New brokers had to joi=
n the existing cluster rather than replace it.</p></li><li style=3D"margin: 8=
px 0 0 32px;mso-special-format: bullet;"><p style=3D"color: rgb(54,55,55);li=
ne-height: 26px;margin-bottom: 0;box-sizing: border-box;padding-left: 4px;fo=
nt-size: 16px;margin: 0;">Client connectivity was tightly coupled to specifi=
c brokers. Over time, applications across Reddit had been configured to conn=
ect directly to specific broker hostnames, typically the first few brokers i=
n a cluster, rather than using a single load-balanced endpoint. Turning off t=
hose brokers would immediately break hundreds of services. Reddit did not co=
ntrol the layer through which clients found and connected to Kafka.</p></li>=
<li style=3D"margin: 8px 0 0 32px;mso-special-format: bullet;"><p style=3D"c=
olor: rgb(54,55,55);line-height: 26px;margin-bottom: 0;box-sizing: border-bo=
x;padding-left: 4px;font-size: 16px;margin: 0;">Every step had to be reversi=
ble. No single action during the migration could leave the system in a state=
 from which recovery was impossible. This meant Reddit had to accept a long p=
eriod where EC2 brokers and Kubernetes brokers ran side by side, and it mean=
t that riskier changes had to wait until everything else was stable.</p></li=
></ul><h2 class=3D"header-anchor-post" style=3D"position: relative;font-fami=
ly: 'SF Pro Display',-apple-system-headline,system-ui,-apple-system,BlinkMac=
SystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji',=
'Segoe UI Emoji','Segoe UI Symbol';font-weight: bold;-webkit-font-smoothing:=
 antialiased;-moz-osx-font-smoothing: antialiased;-webkit-appearance: optimi=
zelegibility;-moz-appearance: optimizelegibility;appearance: optimizelegibil=
ity;margin: 1em 0 0.625em 0;color: rgb(54,55,55);line-height: 1.16em;font-si=
ze: 1.625em;">Phase 1: Taking Control of the Naming Layer</h2><p style=3D"ma=
rgin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;">Th=
e first phase of the migration did not touch Kafka at all.</p><p style=3D"ma=
rgin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;">Re=
ddit introduced a DNS facade, which is a set of DNS records that act as an i=
ntermediate layer between client applications and the actual Kafka brokers. D=
NS is the system that translates human-readable names into the addresses of s=
ervers. By creating new, infrastructure-controlled DNS names that initially p=
ointed to the same EC2 brokers, Reddit changed nothing from the perspective o=
f client applications.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55=
);line-height: 26px;font-size: 16px;">Reddit then rolled out these new conne=
ction strings across more than 250 services using automated tooling that gen=
erated batch pull requests to update configuration files. Once all clients w=
ere talking through this DNS layer, Reddit could change where those names po=
inted, from EC2 to Kubernetes, without modifying any client code.</p><h2 cla=
ss=3D"header-anchor-post" style=3D"position: relative;font-family: 'SF Pro D=
isplay',-apple-system-headline,system-ui,-apple-system,BlinkMacSystemFont,'S=
egoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emo=
ji','Segoe UI Symbol';font-weight: bold;-webkit-font-smoothing: antialiased;=
-moz-osx-font-smoothing: antialiased;-webkit-appearance: optimizelegibility;=
-moz-appearance: optimizelegibility;appearance: optimizelegibility;margin: 1=
em 0 0.625em 0;color: rgb(54,55,55);line-height: 1.16em;font-size: 1.625em;"=
>Phase 2: Making Room for New Brokers</h2><p style=3D"margin: 0 0 20px 0;col=
or: rgb(54,55,55);line-height: 26px;font-size: 16px;">Each Kafka broker is i=
dentified by a unique numeric ID. Strimzi assigns broker IDs starting at 0 b=
y default. However, Reddit=E2=80=99s existing EC2 brokers already occupied t=
hose low numbers.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);lin=
e-height: 26px;font-size: 16px;">To free up that ID space, Reddit doubled th=
e cluster size by adding new EC2 brokers with higher IDs, then terminated th=
e original low-numbered brokers. This shifted all data onto the higher-numbe=
red brokers and opened up IDs 0, 1, 2, and so on for Strimzi-managed brokers=
 to use.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height:=
 26px;font-size: 16px;">See the diagram below:</p><div class=3D"captioned-im=
age-container-static" style=3D"font-size: 16px;line-height: 26px;margin: 32p=
x auto;"><figure style=3D"width: 100%;margin: 0 auto;"><table class=3D"image=
-wrapper" width=3D"100%" border=3D"0" cellspacing=3D"0" cellpadding=3D"0" da=
ta-component-name=3D"Image2ToDOMStatic" style=3D"mso-padding-alt: 1em 0 1.6e=
m;"><tbody><tr><td style=3D"text-align: center;"></td><td class=3D"content" a=
lign=3D"left" width=3D"1456" style=3D"text-align: center;"><a class=3D"image=
-link" target=3D"_blank" href=3D"https://substack.com/redirect/2216d561-a408=
-4a23-8e99-10c0da099502?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p=
768BWtuZifRB-Zs" rel=3D"" style=3D"position: relative;flex-direction: column=
;align-items: center;padding: 0;width: auto;height: auto;border: none;text-d=
ecoration: none;display: block;margin: 0;"><img class=3D"wide-image" data-at=
trs=3D"{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/p=
ublic/images/acea7151-e5fc-4207-95d2-3321cba84268_2468x1486.png&quot;,&quot;=
srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:=
null,&quot;height&quot;:877,&quot;width&quot;:1456,&quot;resizeWidth&quot;:n=
ull,&quot;bytes&quot;:74675,&quot;alt&quot;:null,&quot;title&quot;:null,&quo=
t;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&=
quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;htt=
ps://blog.bytebytego.com/i/190159347?img=3Dhttps%3A%2F%2Fsubstack-post-media=
.s3.amazonaws.com%2Fpublic%2Fimages%2Facea7151-e5fc-4207-95d2-3321cba84268_2=
468x1486.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&qu=
ot;offset&quot;:false}" alt=3D"" width=3D"550" height=3D"331.28434065934067"=
 src=3D"https://substackcdn.com/image/fetch/$s_!RX20!,w_1100,c_limit,f_auto,=
q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazon=
aws.com%2Fpublic%2Fimages%2Facea7151-e5fc-4207-95d2-3321cba84268_2468x1486.p=
ng" style=3D"border: none !important;vertical-align: middle;display: block;-=
ms-interpolation-mode: bicubic;height: auto;margin-bottom: 0;width: auto !im=
portant;max-width: 100% !important;margin: 0 auto;" data-unique-identifier=3D=
""></a></td><td style=3D"text-align: center;"></td></tr></tbody></table></fi=
gure></div><h2 class=3D"header-anchor-post" style=3D"position: relative;font=
-family: 'SF Pro Display',-apple-system-headline,system-ui,-apple-system,Bli=
nkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Em=
oji','Segoe UI Emoji','Segoe UI Symbol';font-weight: bold;-webkit-font-smoot=
hing: antialiased;-moz-osx-font-smoothing: antialiased;-webkit-appearance: o=
ptimizelegibility;-moz-appearance: optimizelegibility;appearance: optimizele=
gibility;margin: 1em 0 0.625em 0;color: rgb(54,55,55);line-height: 1.16em;fo=
nt-size: 1.625em;">Phase 3: Running a Mixed Cluster</h2><p style=3D"margin: 0=
 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;">This was t=
he most technically complex phase.</p><p style=3D"margin: 0 0 20px 0;color: r=
gb(54,55,55);line-height: 26px;font-size: 16px;">Reddit needed Strimzi broke=
rs running on Kubernetes to join the same cluster as the existing EC2 broker=
s and communicate with them directly. Strimzi does not support this out of t=
he box, so Reddit created a fork of the Strimzi operator. The changes Reddit=
 made were deliberately small and targeted:</p><ul style=3D"margin-top: 0;pa=
dding: 0;"><li style=3D"margin: 8px 0 0 32px;mso-special-format: bullet;"><p=
 style=3D"color: rgb(54,55,55);line-height: 26px;margin-bottom: 0;box-sizing=
: border-box;padding-left: 4px;font-size: 16px;margin: 0;">The inter-broker l=
istener configuration was set to use plaintext listeners accessible from bot=
h EC2 and Kubernetes, ensuring brokers in different environments could talk t=
o each other.</p></li><li style=3D"margin: 8px 0 0 32px;mso-special-format: b=
ullet;"><p style=3D"color: rgb(54,55,55);line-height: 26px;margin-bottom: 0;=
box-sizing: border-box;padding-left: 4px;font-size: 16px;margin: 0;">The Zoo=
Keeper connection was pointed at Reddit=E2=80=99s existing EC2-hosted ZooKee=
per, so that both old and new brokers shared the same metadata store and wer=
e part of the same logical cluster.</p></li><li style=3D"margin: 8px 0 0 32p=
x;mso-special-format: bullet;"><p style=3D"color: rgb(54,55,55);line-height:=
 26px;margin-bottom: 0;box-sizing: border-box;padding-left: 4px;font-size: 1=
6px;margin: 0;">The Cruise Control topic was overridden to stay consistent a=
cross both broker sets, allowing Reddit to use Cruise Control to move data b=
etween EC2 and Kubernetes brokers. Cruise Control is a Kafka tool that autom=
ates the process of rebalancing data across brokers in a controlled, measure=
d way. It was central to the actual movement of data during the migration.</=
p></li><li style=3D"margin: 8px 0 0 32px;mso-special-format: bullet;"><p sty=
le=3D"color: rgb(54,55,55);line-height: 26px;margin-bottom: 0;box-sizing: bo=
rder-box;padding-left: 4px;font-size: 16px;margin: 0;">Running a forked oper=
ator in production carries risk. Reddit kept the scope of changes narrow and=
 planned from the start to switch back to the standard Strimzi operator once=
 the migration was complete.</p></li></ul><div class=3D"captioned-image-cont=
ainer-static" style=3D"font-size: 16px;line-height: 26px;margin: 32px auto;"=
><figure style=3D"width: 100%;margin: 0 auto;"><table class=3D"image-wrapper=
" width=3D"100%" border=3D"0" cellspacing=3D"0" cellpadding=3D"0" data-compo=
nent-name=3D"Image2ToDOMStatic" style=3D"mso-padding-alt: 1em 0 1.6em;"><tbo=
dy><tr><td style=3D"text-align: center;"></td><td class=3D"content" align=3D=
"left" width=3D"1456" style=3D"text-align: center;"><a class=3D"image-link" t=
arget=3D"_blank" href=3D"https://substack.com/redirect/56f96378-2abc-48fd-85=
e8-80a02757e032?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZ=
ifRB-Zs" rel=3D"" style=3D"position: relative;flex-direction: column;align-i=
tems: center;padding: 0;width: auto;height: auto;border: none;text-decoratio=
n: none;display: block;margin: 0;"><img class=3D"wide-image" data-attrs=3D"{=
&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/im=
ages/989ca0b4-d2db-49be-a7fd-6cb67b978157_2408x1486.png&quot;,&quot;srcNoWat=
ermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&qu=
ot;height&quot;:899,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quo=
t;bytes&quot;:90132,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&q=
uot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:tr=
ue,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blo=
g.bytebytego.com/i/190159347?img=3Dhttps%3A%2F%2Fsubstack-post-media.s3.amaz=
onaws.com%2Fpublic%2Fimages%2F989ca0b4-d2db-49be-a7fd-6cb67b978157_2408x1486=
.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offse=
t&quot;:false}" alt=3D"" width=3D"550" height=3D"339.5947802197802" src=3D"h=
ttps://substackcdn.com/image/fetch/$s_!P6va!,w_1100,c_limit,f_auto,q_auto:go=
od,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2=
Fpublic%2Fimages%2F989ca0b4-d2db-49be-a7fd-6cb67b978157_2408x1486.png" style=
=3D"border: none !important;vertical-align: middle;display: block;-ms-interp=
olation-mode: bicubic;height: auto;margin-bottom: 0;width: auto !important;m=
ax-width: 100% !important;margin: 0 auto;" data-unique-identifier=3D""></a><=
/td><td style=3D"text-align: center;"></td></tr></tbody></table></figure></d=
iv><h2 class=3D"header-anchor-post" style=3D"position: relative;font-family:=
 'SF Pro Display',-apple-system-headline,system-ui,-apple-system,BlinkMacSys=
temFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Se=
goe UI Emoji','Segoe UI Symbol';font-weight: bold;-webkit-font-smoothing: an=
tialiased;-moz-osx-font-smoothing: antialiased;-webkit-appearance: optimizel=
egibility;-moz-appearance: optimizelegibility;appearance: optimizelegibility=
;margin: 1em 0 0.625em 0;color: rgb(54,55,55);line-height: 1.16em;font-size:=
 1.625em;">Phase 4: Gradually Shifting Data and Traffic</h2><p style=3D"marg=
in: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;">With=
 both sets of brokers running inside the same cluster, Reddit used Cruise Co=
ntrol to incrementally move partition leadership and replicated data from EC=
2 brokers to the Kubernetes brokers.</p><p style=3D"margin: 0 0 20px 0;color=
: rgb(54,55,55);line-height: 26px;font-size: 16px;">Partition leadership det=
ermines which broker is responsible for serving reads and writes for a given=
 piece of data. Kafka stores copies of each partition on multiple brokers fo=
r redundancy. This is called the replication factor. Moving data meant reass=
igning both the leadership and the replicas to the new set of brokers, one p=
artition at a time.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);l=
ine-height: 26px;font-size: 16px;">Reddit monitored this process continuousl=
y as the partition leadership on EC2 declined steadily over roughly a week w=
hile leadership on Strimzi climbed in parallel. Network traffic followed the=
 same pattern. At every point, Reddit could pause or reverse the process if s=
omething looked wrong.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55=
);line-height: 26px;font-size: 16px;">See the dashboard view below:</p><div c=
lass=3D"captioned-image-container-static" style=3D"font-size: 16px;line-heig=
ht: 26px;margin: 32px auto;"><figure style=3D"width: 100%;margin: 0 auto;"><=
table class=3D"image-wrapper" width=3D"100%" border=3D"0" cellspacing=3D"0" c=
ellpadding=3D"0" data-component-name=3D"Image2ToDOMStatic" style=3D"mso-padd=
ing-alt: 1em 0 1.6em;"><tbody><tr><td style=3D"text-align: center;"></td><td=
 class=3D"content" align=3D"left" width=3D"1080" style=3D"text-align: center=
;"><a class=3D"image-link" target=3D"_blank" href=3D"https://substack.com/re=
direct/1e12c91e-2de6-455f-b5a0-da8f391ad9e8?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ=
85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" rel=3D"" style=3D"position: relative;fl=
ex-direction: column;align-items: center;padding: 0;width: auto;height: auto=
;border: none;text-decoration: none;display: block;margin: 0;"><img class=3D=
"wide-image" data-attrs=3D"{&quot;src&quot;:&quot;https://substack-post-medi=
a.s3.amazonaws.com/public/images/8ad8c30a-5b29-4699-9680-d7ea9a679fa6_1080x1=
110.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&q=
uot;imageSize&quot;:null,&quot;height&quot;:1110,&quot;width&quot;:1080,&quo=
t;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;t=
itle&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFo=
ld&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&=
quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:fals=
e}" alt=3D"" width=3D"550" height=3D"565.2777777777778" src=3D"https://subst=
ackcdn.com/image/fetch/$s_!FDYu!,w_1100,c_limit,f_auto,q_auto:good,fl_progre=
ssive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fim=
ages%2F8ad8c30a-5b29-4699-9680-d7ea9a679fa6_1080x1110.png" style=3D"border: n=
one !important;vertical-align: middle;display: block;-ms-interpolation-mode:=
 bicubic;height: auto;margin-bottom: 0;width: auto !important;max-width: 100=
% !important;margin: 0 auto;" data-unique-identifier=3D""></a></td><td style=
=3D"text-align: center;"></td></tr></tbody></table><figcaption class=3D"imag=
e-caption" style=3D"box-sizing: content-box;color: rgb(119,119,119);font-siz=
e: 14px;line-height: 20px;font-weight: 400;letter-spacing: -.15px;margin-top=
: 8px;width: 70%;padding-left: 15%;padding-right: 15%;text-align: center;"><=
strong>Source: </strong><a href=3D"https://substack.com/redirect/c4e2946b-1b=
92-4f64-8e37-a9cddd681332?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy=
3p768BWtuZifRB-Zs" rel=3D"" style=3D"text-decoration: underline;">Reddit Eng=
ineering Blog</a></figcaption></figure></div><h2 class=3D"header-anchor-post=
" style=3D"position: relative;font-family: 'SF Pro Display',-apple-system-he=
adline,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetic=
a,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';fo=
nt-weight: bold;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing:=
 antialiased;-webkit-appearance: optimizelegibility;-moz-appearance: optimiz=
elegibility;appearance: optimizelegibility;margin: 1em 0 0.625em 0;color: rg=
b(54,55,55);line-height: 1.16em;font-size: 1.625em;">Phase 5: Migrating the C=
ontrol Plane</h2><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-he=
ight: 26px;font-size: 16px;">ZooKeeper had managed Kafka=E2=80=99s metadata t=
hroughout the entire broker migration. Reddit made a deliberate choice not t=
o change the control plane until after the data plane was fully stable on Ku=
bernetes. This separation of concerns reduced the risk of compounding failur=
es.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px=
;font-size: 16px;">Once all EC2 brokers were terminated and all data and tra=
ffic were running on Kubernetes, Reddit executed the migration from ZooKeepe=
r to KRaft. KRaft is Kafka=E2=80=99s built-in metadata management system tha=
t eliminates the need for ZooKeeper.</p><p style=3D"margin: 0 0 20px 0;color=
: rgb(54,55,55);line-height: 26px;font-size: 16px;">See the diagram below:</=
p><div class=3D"captioned-image-container-static" style=3D"font-size: 16px;l=
ine-height: 26px;margin: 32px auto;"><figure style=3D"width: 100%;margin: 0 a=
uto;"><table class=3D"image-wrapper" width=3D"100%" border=3D"0" cellspacing=
=3D"0" cellpadding=3D"0" data-component-name=3D"Image2ToDOMStatic" style=3D"=
mso-padding-alt: 1em 0 1.6em;"><tbody><tr><td style=3D"text-align: center;">=
</td><td class=3D"content" align=3D"left" width=3D"1456" style=3D"text-align=
: center;"><a class=3D"image-link" target=3D"_blank" href=3D"https://substac=
k.com/redirect/efd7ec81-5efb-4de4-aa99-e086e9d5f21d?j=3DeyJ1IjoiNGl3b2U2In0.=
sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" rel=3D"" style=3D"position: rel=
ative;flex-direction: column;align-items: center;padding: 0;width: auto;heig=
ht: auto;border: none;text-decoration: none;display: block;margin: 0;"><img c=
lass=3D"wide-image" data-attrs=3D"{&quot;src&quot;:&quot;https://substack-po=
st-media.s3.amazonaws.com/public/images/2ca4ff58-4ddb-4604-9097-b4cfd1aa9d0f=
_3148x1796.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:=
null,&quot;imageSize&quot;:null,&quot;height&quot;:831,&quot;width&quot;:145=
6,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:117557,&quot;alt&quot;:null=
,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&qu=
ot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;inte=
rnalRedirect&quot;:&quot;https://blog.bytebytego.com/i/190159347?img=3Dhttps=
%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ca4ff58-4=
ddb-4604-9097-b4cfd1aa9d0f_3148x1796.png&quot;,&quot;isProcessing&quot;:fals=
e,&quot;align&quot;:null,&quot;offset&quot;:false}" alt=3D"" width=3D"550" h=
eight=3D"313.907967032967" src=3D"https://substackcdn.com/image/fetch/$s_!dW=
63!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsub=
stack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ca4ff58-4ddb-4604-909=
7-b4cfd1aa9d0f_3148x1796.png" style=3D"border: none !important;vertical-alig=
n: middle;display: block;-ms-interpolation-mode: bicubic;height: auto;margin=
-bottom: 0;width: auto !important;max-width: 100% !important;margin: 0 auto;=
" data-unique-identifier=3D""></a></td><td style=3D"text-align: center;"></t=
d></tr></tbody></table></figure></div><p style=3D"margin: 0 0 20px 0;color: r=
gb(54,55,55);line-height: 26px;font-size: 16px;">Since Strimzi and Kafka bot=
h provide documented steps for this migration, and because the rest of the s=
ystem had already settled, this final phase was comparatively straightforwar=
d.</p><h2 class=3D"header-anchor-post" style=3D"position: relative;font-fami=
ly: 'SF Pro Display',-apple-system-headline,system-ui,-apple-system,BlinkMac=
SystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji',=
'Segoe UI Emoji','Segoe UI Symbol';font-weight: bold;-webkit-font-smoothing:=
 antialiased;-moz-osx-font-smoothing: antialiased;-webkit-appearance: optimi=
zelegibility;-moz-appearance: optimizelegibility;appearance: optimizelegibil=
ity;margin: 1em 0 0.625em 0;color: rgb(54,55,55);line-height: 1.16em;font-si=
ze: 1.625em;">Phase 6: Cleaning Up and Handing Off to Standard Strimzi</h2><=
p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-si=
ze: 16px;">After both the data plane and the control plane were fully runnin=
g on Kubernetes, Reddit removed all the configuration overrides that the for=
ked Strimzi operator had introduced.</p><p style=3D"margin: 0 0 20px 0;color=
: rgb(54,55,55);line-height: 26px;font-size: 16px;">Control of the clusters w=
as handed off to the standard, unmodified Strimzi operator. The EC2 infrastr=
ucture was decommissioned.</p><h2 class=3D"header-anchor-post" style=3D"posi=
tion: relative;font-family: 'SF Pro Display',-apple-system-headline,system-u=
i,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-se=
rif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-weight: bold=
;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: antialiased;-w=
ebkit-appearance: optimizelegibility;-moz-appearance: optimizelegibility;app=
earance: optimizelegibility;margin: 1em 0 0.625em 0;color: rgb(54,55,55);lin=
e-height: 1.16em;font-size: 1.625em;">Conclusion</h2><p style=3D"margin: 0 0=
 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;">Reddit=E2=80=
=99s migration is a good example of how large-scale infrastructure changes d=
o not have to be dramatic, high-risk events. By breaking the work into small=
, reversible, well-understood steps and by respecting the constraints the sy=
stem imposed, Reddit moved a petabyte-scale platform to Kubernetes without a=
 single moment of downtime.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,=
55,55);line-height: 26px;font-size: 16px;">Some key lessons from Reddit=E2=80=
=99s migration journey were as follows:</p><ul style=3D"margin-top: 0;paddin=
g: 0;"><li style=3D"margin: 8px 0 0 32px;mso-special-format: bullet;"><p sty=
le=3D"color: rgb(54,55,55);line-height: 26px;margin-bottom: 0;box-sizing: bo=
rder-box;padding-left: 4px;font-size: 16px;margin: 0;">Introducing a control=
lable abstraction layer between clients and infrastructure, whether that is D=
NS, a proxy, or an API gateway, is one of the highest-leverage changes you c=
an make during a migration. It decouples the two sides and lets you change t=
he infrastructure without forcing every team to update their code.</p></li><=
li style=3D"margin: 8px 0 0 32px;mso-special-format: bullet;"><p style=3D"co=
lor: rgb(54,55,55);line-height: 26px;margin-bottom: 0;box-sizing: border-box=
;padding-left: 4px;font-size: 16px;margin: 0;">Metadata and logical state te=
nd to outlive the physical machines they run on. When planning any large mig=
ration, treat the logical state as the thing you are protecting, and treat t=
he infrastructure as something you are replacing around it.</p></li><li styl=
e=3D"margin: 8px 0 0 32px;mso-special-format: bullet;"><p style=3D"color: rg=
b(54,55,55);line-height: 26px;margin-bottom: 0;box-sizing: border-box;paddin=
g-left: 4px;font-size: 16px;margin: 0;">Designing each step to be undoable i=
s not just a safety measure. It changes how confidently and quickly you can m=
ove forward, because you know you can always step back if something goes wro=
ng.</p></li><li style=3D"margin: 8px 0 0 32px;mso-special-format: bullet;"><=
p style=3D"color: rgb(54,55,55);line-height: 26px;margin-bottom: 0;box-sizin=
g: border-box;padding-left: 4px;font-size: 16px;margin: 0;">A migration that=
 looks messy in the middle but never breaks production is far preferable to a=
 clean design that requires a moment where things could go wrong with no rec=
overy path.</p></li></ul><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55)=
;line-height: 26px;font-size: 16px;text-align: justify"><strong>References:<=
/strong></p><ul style=3D"margin-top: 0;padding: 0;margin-bottom: 0;"><li sty=
le=3D"margin: 8px 0 0 32px;mso-special-format: bullet;"><p style=3D"color: r=
gb(54,55,55);line-height: 26px;margin-bottom: 0;box-sizing: border-box;paddi=
ng-left: 4px;font-size: 16px;margin: 0;text-align: justify"><a href=3D"https=
://substack.com/redirect/c4e2946b-1b92-4f64-8e37-a9cddd681332?j=3DeyJ1IjoiNG=
l3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" rel=3D"" style=3D"col=
or: #7756e3;text-decoration: none;">Swapping the Engine Mid-Flight: How We M=
oved Reddit=E2=80=99s Petabyte Scale Kafka Fleet to Kubernetes</a></p></li><=
li style=3D"margin: 8px 0 0 32px;mso-special-format: bullet;"><p style=3D"co=
lor: rgb(54,55,55);line-height: 26px;margin-bottom: 0;box-sizing: border-box=
;padding-left: 4px;font-size: 16px;margin: 0;text-align: justify"><a href=3D=
"https://substack.com/redirect/669e8255-0377-4e1f-a3d1-1933956d2ead?j=3DeyJ1=
IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" rel=3D"" style=3D=
"color: #7756e3;text-decoration: none;">What is Strimzi</a></p></li><li styl=
e=3D"margin: 8px 0 0 32px;mso-special-format: bullet;"><p style=3D"color: rg=
b(54,55,55);line-height: 26px;margin-bottom: 0;box-sizing: border-box;paddin=
g-left: 4px;font-size: 16px;margin: 0;text-align: justify"><a href=3D"https:=
//substack.com/redirect/a3b5914d-cc94-428e-950b-2533e47d2159?j=3DeyJ1IjoiNGl=
3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" rel=3D"" style=3D"colo=
r: #7756e3;text-decoration: none;">KRaft: Apache Kafka without Zookeeper</a>=
</p></li></ul></div></div><div class=3D"postscript-placeholder" style=3D"mar=
gin: 32px 0 0;width: 100%;box-sizing: border-box;font-size: 16px;line-height=
: 26px;"></div><table class=3D"email-ufi-2-bottom" role=3D"presentation" wid=
th=3D"100%" border=3D"0" cellspacing=3D"0" cellpadding=3D"0" style=3D"border=
-top: 1px solid rgb(0,0,0,.1);border-bottom: 1px solid rgb(0,0,0,.1);min-wid=
th: 100%;"><tbody><tr height=3D"16"><td height=3D"16" style=3D"font-size:0px=
;line-height:0;">&nbsp;</td></tr><tr><td><table class=3D"email-ufi-2-row" ro=
le=3D"presentation" width=3D"100%" border=3D"0" cellspacing=3D"0" cellpaddin=
g=3D"0" style=3D"border-bottom: 1px solid rgb(0,0,0,.1);"><tbody><tr><td wid=
th=3D"95%"><table class=3D"email-button-outline-wrapper-full-width" role=3D"=
presentation" width=3D"auto" border=3D"0" cellspacing=3D"0" cellpadding=3D"0=
" style=3D"width: 95%;margin: 0 auto;"><tbody><tr><td align=3D"center"><a cl=
ass=3D"email-button-outline full-width" href=3D"https://substack.com/app-lin=
k/post?publication_id=3D817132&amp;post_id=3D190159347&amp;utm_source=3Dsubs=
tack&amp;utm_medium=3Demail&amp;utm_content=3Dshare&amp;utm_campaign=3Demail=
-share&amp;action=3Dshare&amp;triggerShare=3Dtrue&amp;isFreemail=3Dtrue&amp;=
r=3D4iwoe6&amp;token=3DeyJ1c2VyX2lkIjoyNzM2MjIzOTgsInBvc3RfaWQiOjE5MDE1OTM0N=
ywiaWF0IjoxNzczNzYyMTkzLCJleHAiOjE3NzYzNTQxOTMsImlzcyI6InB1Yi04MTcxMzIiLCJzd=
WIiOiJwb3N0LXJlYWN0aW9uIn0.0WltCugqafQTWZLqDoTFlE0r716VEFnBK1pdn9-CcCI" styl=
e=3D"font-family: system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Robo=
to,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI=
 Symbol';display: inline-block;font-weight: 500;border: 1px solid rgb(0,0,0,=
.1);border-radius: 9999px;text-transform: uppercase;font-size: 12px;line-hei=
ght: 12px;padding: 9px 14px;text-decoration: none;color: rgb(119,119,119);wi=
dth: 100%;padding-left: 0;padding-right: 0;"><img class=3D"icon" src=3D"http=
s://substackcdn.com/image/fetch/$s_!rmYa!,w_36,c_scale,f_png,q_auto:good,fl_=
progressive:steep/https%3A%2F%2Fsubstack.com%2Ficon%2FLucideShare%3Fv%3D4%26=
height%3D36%26fill%3Dnone%26stroke%3D%2523808080%26strokeWidth%3D2" width=3D=
"18" height=3D"18" style=3D"margin-right: 8px;min-width: 18px;min-height: 18=
px;border: none;vertical-align: middle;max-width: 18px" alt=3D"" data-unique=
-identifier=3D""><span class=3D"email-button-text" style=3D"vertical-align: m=
iddle;">Share</span></a></td></tr></tbody></table></td></tr><tr height=3D"16=
"><td height=3D"16" style=3D"font-size:0px;line-height:0;">&nbsp;</td></tr><=
/tbody></table></td></tr><tr height=3D"16"><td height=3D"16" style=3D"font-s=
ize:0px;line-height:0;">&nbsp;</td></tr><tr><td><table role=3D"presentation"=
 width=3D"100%" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr>=
<td><table role=3D"presentation" width=3D"auto" border=3D"0" cellspacing=3D"=
0" cellpadding=3D"0" style=3D"margin:0 auto;"><tbody><tr><td style=3D"vertic=
al-align:middle;"><table role=3D"presentation" width=3D"auto" border=3D"0" c=
ellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td align=3D"center"><a class=3D=
"email-button-outline" href=3D"https://substack.com/app-link/post?publicatio=
n_id=3D817132&amp;post_id=3D190159347&amp;utm_source=3Dsubstack&amp;isFreema=
il=3Dtrue&amp;submitLike=3Dtrue&amp;token=3DeyJ1c2VyX2lkIjoyNzM2MjIzOTgsInBv=
c3RfaWQiOjE5MDE1OTM0NywicmVhY3Rpb24iOiLinaQiLCJpYXQiOjE3NzM3NjIxOTMsImV4cCI6=
MTc3NjM1NDE5MywiaXNzIjoicHViLTgxNzEzMiIsInN1YiI6InJlYWN0aW9uIn0.YoecT2aUzvb6=
Hdxe5EnrLOnBuxT1TsCf8L6mbBF0UJA&amp;utm_medium=3Demail&amp;utm_campaign=3Dem=
ail-reaction&amp;r=3D4iwoe6" style=3D"font-family: system-ui,-apple-system,B=
linkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color E=
moji','Segoe UI Emoji','Segoe UI Symbol';display: inline-block;font-weight: 5=
00;border: 1px solid rgb(0,0,0,.1);border-radius: 9999px;text-transform: upp=
ercase;font-size: 12px;line-height: 12px;padding: 9px 14px;text-decoration: n=
one;color: rgb(119,119,119);"><img class=3D"icon" src=3D"https://substackcdn=
.com/image/fetch/$s_!PeVs!,w_36,c_scale,f_png,q_auto:good,fl_progressive:ste=
ep/https%3A%2F%2Fsubstack.com%2Ficon%2FLucideHeart%3Fv%3D4%26height%3D36%26f=
ill%3Dnone%26stroke%3D%2523808080%26strokeWidth%3D2" width=3D"18" height=3D"=
18" style=3D"margin-right: 8px;min-width: 18px;min-height: 18px;border: none=
;vertical-align: middle;max-width: 18px" alt=3D"" data-unique-identifier=3D"=
"><span class=3D"email-button-text" style=3D"vertical-align: middle;">Like</=
span></a></td></tr></tbody></table></td><td width=3D"8" style=3D"min-width:8=
px;"></td><td style=3D"vertical-align:middle;"><table role=3D"presentation" w=
idth=3D"auto" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><t=
d align=3D"center"><a class=3D"email-button-outline" href=3D"https://substac=
k.com/app-link/post?publication_id=3D817132&amp;post_id=3D190159347&amp;utm_=
source=3Dsubstack&amp;utm_medium=3Demail&amp;isFreemail=3Dtrue&amp;comments=3D=
true&amp;token=3DeyJ1c2VyX2lkIjoyNzM2MjIzOTgsInBvc3RfaWQiOjE5MDE1OTM0NywiaWF0=
IjoxNzczNzYyMTkzLCJleHAiOjE3NzYzNTQxOTMsImlzcyI6InB1Yi04MTcxMzIiLCJzdWIiOiJw=
b3N0LXJlYWN0aW9uIn0.0WltCugqafQTWZLqDoTFlE0r716VEFnBK1pdn9-CcCI&amp;r=3D4iwo=
e6&amp;utm_campaign=3Demail-half-magic-comments&amp;action=3Dpost-comment&am=
p;utm_source=3Dsubstack&amp;utm_medium=3Demail" style=3D"font-family: system=
-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-=
serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';display: inline=
-block;font-weight: 500;border: 1px solid rgb(0,0,0,.1);border-radius: 9999p=
x;text-transform: uppercase;font-size: 12px;line-height: 12px;padding: 9px 1=
4px;text-decoration: none;color: rgb(119,119,119);"><img class=3D"icon" src=3D=
"https://substackcdn.com/image/fetch/$s_!x1tS!,w_36,c_scale,f_png,q_auto:goo=
d,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2Ficon%2FLucideComments%3Fv=
%3D4%26height%3D36%26fill%3Dnone%26stroke%3D%2523808080%26strokeWidth%3D2" w=
idth=3D"18" height=3D"18" style=3D"margin-right: 8px;min-width: 18px;min-hei=
ght: 18px;border: none;vertical-align: middle;max-width: 18px" alt=3D"" data=
-unique-identifier=3D""><span class=3D"email-button-text" style=3D"vertical-=
align: middle;">Comment</span></a></td></tr></tbody></table></td><td width=3D=
"8" style=3D"min-width:8px;"></td><td style=3D"vertical-align:middle;"><tabl=
e role=3D"presentation" width=3D"auto" border=3D"0" cellspacing=3D"0" cellpa=
dding=3D"0"><tbody><tr><td align=3D"center"><a class=3D"email-button-outline=
" href=3D"https://substack.com/redirect/2/eyJlIjoiaHR0cHM6Ly9vcGVuLnN1YnN0YW=
NrLmNvbS9wdWIvYnl0ZWJ5dGVnby9wL2hvdy1yZWRkaXQtbWlncmF0ZWQtcGV0YWJ5dGUtc2NhbG=
U_dXRtX3NvdXJjZT1zdWJzdGFjayZ1dG1fbWVkaXVtPWVtYWlsJnV0bV9jYW1wYWlnbj1lbWFpbC=
1yZXN0YWNrLWNvbW1lbnQmYWN0aW9uPXJlc3RhY2stY29tbWVudCZyPTRpd29lNiZ0b2tlbj1leU=
oxYzJWeVgybGtJam95TnpNMk1qSXpPVGdzSW5CdmMzUmZhV1FpT2pFNU1ERTFPVE0wTnl3aWFXRj=
BJam94Tnpjek56WXlNVGt6TENKbGVIQWlPakUzTnpZek5UUXhPVE1zSW1semN5STZJbkIxWWkwNE=
1UY3hNeklpTENKemRXSWlPaUp3YjNOMExYSmxZV04wYVc5dUluMC4wV2x0Q3VncWFmUVRXWkxxRG=
9URmxFMHI3MTZWRUZuQksxcGRuOS1DY0NJIiwicCI6MTkwMTU5MzQ3LCJzIjo4MTcxMzIsImYiOn=
RydWUsInUiOjI3MzYyMjM5OCwiaWF0IjoxNzczNzYyMTkzLCJleHAiOjIwODkzMzgxOTMsImlzcy=
I6InB1Yi0wIiwic3ViIjoibGluay1yZWRpcmVjdCJ9.bGdfyJK3WU2__x3MJhiqOLUdzKulsHIVw=
nD3DAxw4uM?&amp;utm_source=3Dsubstack&amp;utm_medium=3Demail" style=3D"font-=
family: system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helveti=
ca,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';d=
isplay: inline-block;font-weight: 500;border: 1px solid rgb(0,0,0,.1);border=
-radius: 9999px;text-transform: uppercase;font-size: 12px;line-height: 12px;=
padding: 9px 14px;text-decoration: none;color: rgb(119,119,119);"><img class=
=3D"icon" src=3D"https://substackcdn.com/image/fetch/$s_!5EGt!,w_36,c_scale,=
f_png,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2Ficon%2FN=
oteForwardIcon%3Fv%3D4%26height%3D36%26fill%3Dnone%26stroke%3D%2523808080%26=
strokeWidth%3D2" width=3D"18" height=3D"18" style=3D"margin-right: 8px;min-w=
idth: 18px;min-height: 18px;border: none;vertical-align: middle;max-width: 1=
8px" alt=3D"" data-unique-identifier=3D""><span class=3D"email-button-text" s=
tyle=3D"vertical-align: middle;">Restack</span></a></td></tr></tbody></table=
></td></tr></tbody></table></td><td align=3D"right"><table role=3D"presentat=
ion" width=3D"auto" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody>=
<tr></tr></tbody></table></td></tr></tbody></table></td></tr><tr height=3D"1=
6"><td height=3D"16" style=3D"font-size:0px;line-height:0;">&nbsp;</td></tr>=
</tbody></table><div class=3D"footer footer-ZM59BM" style=3D"color: rgb(119,=
119,119);text-align: center;font-size: 16px;line-height: 26px;padding: 24px0=
;"><div style=3D"font-size: 16px;line-height: 26px;padding-bottom: 24px"><p c=
lass=3D"pencraft pc-reset color-secondary-ls1g8s size-12-mmZ61m reset-IxiVJZ=
 small meta-B2bqa5" style=3D"list-style: none;font-family: system-ui,-apple-=
system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Appl=
e Color Emoji','Segoe UI Emoji','Segoe UI Symbol';padding-bottom: 0;font-siz=
e: 12px;line-height: 16px;margin: 0;color: rgb(119,119,119);text-decoration:=
 unset;">=C2=A9 2026 <span>ByteByteGo</span><br>548 Market Street PMB 72296,=
 San Francisco, CA 94104 <br><a href=3D"https://substack.com/redirect/2/eyJl=
IjoiaHR0cHM6Ly9ibG9nLmJ5dGVieXRlZ28uY29tL2FjdGlvbi9kaXNhYmxlX2VtYWlsP3Rva2Vu=
PWV5SjFjMlZ5WDJsa0lqb3lOek0yTWpJek9UZ3NJbkJ2YzNSZmFXUWlPakU1TURFMU9UTTBOeXdp=
YVdGMElqb3hOemN6TnpZeU1Ua3pMQ0psZUhBaU9qRTRNRFV5T1RneE9UTXNJbWx6Y3lJNkluQjFZ=
aTA0TVRjeE16SWlMQ0p6ZFdJaU9pSmthWE5oWW14bFgyVnRZV2xzSW4wLm9ORmtmVVZnNFBxTmlm=
TVRqbTkzQ05YeXFVc3lzWFFkTWtqMUFKVURGWlEiLCJwIjoxOTAxNTkzNDcsInMiOjgxNzEzMiwi=
ZiI6dHJ1ZSwidSI6MjczNjIyMzk4LCJpYXQiOjE3NzM3NjIxOTMsImV4cCI6MjA4OTMzODE5Mywi=
aXNzIjoicHViLTAiLCJzdWIiOiJsaW5rLXJlZGlyZWN0In0.0jkgPB4iHPNnyqdnyF8yhrUyQMi5=
PChWKAMtO_1IzUQ?" style=3D"color: #7756e3;text-decoration: none;"><span styl=
e=3D"color: rgb(119,119,119);text-decoration: underline;">Unsubscribe</span>=
</a></p></div><p class=3D"footerSection-EHR0jG small powered-by-substack" st=
yle=3D"padding: 0 24px;font-size: 12px;line-height: 20px;margin: 0;color: rg=
b(119,119,119);font-family: system-ui,-apple-system,BlinkMacSystemFont,'Sego=
e UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji'=
,'Segoe UI Symbol';padding-bottom: 0;margin-top: 0;"><a href=3D"https://subs=
tack.com/redirect/2/eyJlIjoiaHR0cHM6Ly9zdWJzdGFjay5jb20vc2lnbnVwP3V0bV9zb3Vy=
Y2U9c3Vic3RhY2smdXRtX21lZGl1bT1lbWFpbCZ1dG1fY29udGVudD1mb290ZXImdXRtX2NhbXBh=
aWduPWF1dG9maWxsZWQtZm9vdGVyJmZyZWVTaWdudXBFbWFpbD10anBodWhzQGdtYWlsLmNvbSZy=
PTRpd29lNiIsInAiOjE5MDE1OTM0NywicyI6ODE3MTMyLCJmIjp0cnVlLCJ1IjoyNzM2MjIzOTgs=
ImlhdCI6MTc3Mzc2MjE5MywiZXhwIjoyMDg5MzM4MTkzLCJpc3MiOiJwdWItMCIsInN1YiI6Imxp=
bmstcmVkaXJlY3QifQ.Z6b0E1SDn91lRTbKy_-vVXjRYIHoZWzYhCPWagjQK4Q?" style=3D"co=
lor: #7756e3;text-decoration: none;display: inline-block;margin: 0 4px;"><im=
g src=3D"https://substackcdn.com/image/fetch/$s_!LkrL!,w_270,c_limit,f_auto,=
q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2Fimg%2Femail%2Fp=
ublish-button%402x.png" srcset=3D"https://substackcdn.com/image/fetch/$s_!wg=
fj!,w_135,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubs=
tack.com%2Fimg%2Femail%2Fpublish-button.png, https://substackcdn.com/image/f=
etch/$s_!LkrL!,w_270,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3=
A%2F%2Fsubstack.com%2Fimg%2Femail%2Fpublish-button%402x.png 2x, https://subs=
tackcdn.com/image/fetch/$s_!KjtY!,w_405,c_limit,f_auto,q_auto:good,fl_progre=
ssive:steep/https%3A%2F%2Fsubstack.com%2Fimg%2Femail%2Fpublish-button%403x.p=
ng 3x" width=3D"135" alt=3D"Start writing" height=3D"40" style=3D"max-width:=
 550px;border: none !important;vertical-align: middle;" data-unique-identifi=
er=3D""></a></p></div></div></td><td></td></tr></tbody></table><img src=3D"h=
ttps://eotrx.substackcdn.com/open?token=3DeyJtIjoiPDIwMjYwMzE3MTUzMDQ0LjMuMm=
EzZjkyMmZlNDY2NTIxMEBtZy1kMC5zdWJzdGFjay5jb20-IiwidSI6MjczNjIyMzk4LCJyIjoidG=
pwaHVoc0BnbWFpbC5jb20iLCJkIjoibWctZDAuc3Vic3RhY2suY29tIiwicCI6MTkwMTU5MzQ3LC=
J0IjoibmV3c2xldHRlciIsImEiOiJldmVyeW9uZSIsInMiOjgxNzEzMiwiYyI6InBvc3QiLCJmIj=
p0cnVlLCJwb3NpdGlvbiI6ImJvdHRvbSIsImlhdCI6MTc3Mzc2MjE5NCwiZXhwIjoxNzc2MzU0MT=
k0LCJpc3MiOiJwdWItMCIsInN1YiI6ImVvIn0.HYtHAkWT7J12JXpCw1vR5x81NED7tiU0sfnOek=
EdEmo" alt=3D"" width=3D"1" height=3D"1" border=3D"0" style=3D"height:1px !i=
mportant;width:1px !important;border-width:0 !important;margin-top:0 !import=
ant;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !impo=
rtant;padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !=
important;padding-left:0 !important;" data-unique-identifier=3D""><img width=
=3D"1" height=3D"1" alt=3D"" src=3D"https://email.mg-d0.substack.com/o/eJxMk=
EFuwyAQRU8TdrVgwBAWnMUCM3ZobbBgSOXbV06y6GI2b6Snpz97wrXU0x2lEYtOS7-MkaETxkijQ=
VjFcPdpm1bMWD1hnDz9-3IO7OHiHNRo7F3bYA0iWBiFiDqiNUvw1rPkgIPmUhgxSq7UIAfwcrEAC=
yqtRxD8pvi-fkU-tB4a-flnmMvOUpuWiq8ER7Uju0In32PCPKPDJ9az5A9O0QnLxWilMm9C54Eu4=
2_bkAgrO3qY5rLvPSc6J8w-bBg_4h62NHtKJV-iuzBCAquOvo9Hf7Sb4utV8apqPcSy-5RdOAmvW=
wuj94i9Yb0EYKQGkPbOng7-AgAA__94HncF" data-unique-identifier=3D""></div></blo=
ckquote></body></html>=

--Apple-Mail-63BC2587-E5C7-403F-8E50-54C5DFDBC8B8--
