Kafgres 0.2.0, extensão do Postgres compatível com Kafka, chega a cerca de 700 MB/s
Aprofundamento CEVIU
Aprofundamento
O Kafgres é uma extensão do Postgres que embute um broker singleton dentro do banco. Isso permite integração com transações e deixa sistemas externos falarem com ele como falariam com um Kafka de verdade. Boa parte do trabalho roda em um background worker iniciado pelo Postgres. Na configuração padrão, os bytes dos tópicos vão direto para o disco, sem passar pelos internos do Postgres. Só os metadados ficam em tabelas.
O diagnóstico partiu de profiling na versão 0.1.0. Com 100 a 200 MB/s o motor engasgava, e o núcleo de CPU do Kafgres chegava perto de 100%. O disco do teste fazia cerca de 1911 MB/s e 68 mil fsyncs/s, enquanto o broker dava menos de 600 fsyncs/s, então o gargalo era CPU. No tempo on-CPU, 40,7% ia para parse, analyze e plan. Sobre o tempo bloqueado, cerca de um terço estava no commit.
Três mudanças pesaram. Primeiro, SPI_keepplan para reaproveitar planos genéricos das queries de metadados. Segundo, o parâmetro relaxed_produce_commit, que relaxa o commit síncrono dos offsets e deixa mais metadado acumular no WAL antes do flush. Terceiro, trocar o tick-loop de 5 ms por WaitEventSet, que bloqueia até o socket ficar pronto. Esse último respondeu pela maior parte do ganho com host networking. Somadas a outros ajustes, as primeiras mudanças levaram de 113 MB/s para 197 MB/s. Com registros de 256 KiB, o resultado final foi 700 MB/s estáveis e cerca de 600 mil eventos por segundo, numa máquina i9 com NVMe com proteção contra perda de energia.
Há também a opção de gravar os dados dos tópicos em outro diretório. Com disco separado, 100 MB/s de produce teve impacto de cerca de 1 a 5% no pgbench rodando no mesmo banco. O autor admite o limite: o Kafgres faz failover para um secundário, como o Postgres, mas não absorve uma queda de zona como um cluster Kafka em três zonas.
Por que isso importa
Para quem opera pipelines de eventos, a leitura é que a maioria das cargas pequenas talvez não precise de um cluster Kafka. O texto cita estimativa de fornecedores de que 56% das cargas ficam em até 1 MB/s. Mas o número de 700 MB/s vem de um benchmark único, em hardware dedicado e com um único broker. Antes de trocar, vale medir a sua carga e decidir quanta resiliência entre zonas você realmente exige.
Perguntas frequentes
O que é o Kafgres?
É uma extensão do Postgres que embute um broker singleton compatível com Kafka dentro do banco. Sistemas externos interagem com ele como fariam com um Kafka real. Os dados dos tópicos vão direto para o disco, e só os metadados passam pelo Postgres.
Como o Kafgres 0.2.0 chegou a cerca de 700 MB/s?
Houve três mudanças principais. Cache de query plans com SPI_keepplan, commit de offsets relaxado pelo parâmetro relaxed_produce_commit e troca do polling de 5 ms por WaitEventSet, baseado em prontidão de socket. O teste usou registros de 256 KiB em uma máquina i9 com NVMe.
O relaxed_produce_commit tem algum risco?
Ele relaxa a gravação síncrona dos offsets, deixando mais metadado acumular no WAL antes do flush. O parâmetro pode ser ligado ou desligado. O artigo não detalha outros riscos além dessa troca de durabilidade por vazão.
O Kafgres substitui um cluster Kafka?
Segundo o autor, para a maioria dos casos de uso ele basta. A limitação é a resiliência: o failover vai para um banco secundário, mas não há tolerância transparente a queda de zona como em um cluster Kafka de três zonas.
Fontes
- rynr.devfonte original
- Categoria
- CEVIU Dados
- Publicado
- 02 de novembro de 2026
- Editoria
- CEVIU Dados
