Deploy com Helm
O Streaming Hub vem como um Helm chart dedicado, o
streaming-hub-helm, separado de qualquer outro chart de produto Lerian. O chart roda o hub em um de dois formatos:
all: um único deployment que roda todos os workers de segundo plano. Este é o padrão e o mais simples de operar.split: deployments separados de ingest e delivery que escalam de forma independente: as réplicas de ingest compartilham um grupo de consumidores Kafka, enquanto as réplicas de delivery processam jobs de entrega do Postgres.
STREAMING_HUB_ROLE (all | ingest | delivery). O papel controla quais workers de segundo plano rodam e quais clientes Kafka discam. Ele não controla quais rotas HTTP sobem. Todo papel serve a API de control plane completa e, o que é decisivo, o endpoint /readyz de que seu orquestrador e sua coleta de métricas dependem. Há uma imagem e um binário. O papel é uma entrada de deploy, não de build.
Rodar migrações de banco de dados
O Streaming Hub usa um único banco PostgreSQL próprio do hub, e ele nunca migra a si mesmo. As migrações de schema rodam fora de banda. Um passo de migração separado (por exemplo, um hook PreSync do ArgoCD) aplica as migrações versionadas antes de o hub começar. No boot o hub apenas verifica que a versão de schema que espera está presente. Ele nunca roda uma migração como efeito colateral de começar. O hub provisiona por conta própria as partições semanais das suas tabelas com antecedência, como tarefa de segundo plano de rotina. Isso conta como manutenção interna, não como migração de schema. Não exige ação do operador, desde que o cron de partições continue rodando.
Saúde e desligamento gracioso
O Streaming Hub expõe dois endpoints de probe distintos. Ligue cada um à probe correspondente do Kubernetes:
O
/readyz distingue duas classes de falha. Uma falha de probe de runtime (Postgres inacessível, consumidor morto) leva a réplica a Down e para fora de rotação. Um degradador (latência elevada, atraso do consumidor, buffer de partição fino) prende a réplica em Degraded mas a mantém servindo. Uma réplica prejudicada não deve recusar tráfego. O conjunto de probes conhece o papel. Um consumidor de ingest ausente nunca deixa um pod de papel delivery sem readiness.
Em um SIGTERM o hub drena com elegância. Ele vira o /readyz para NotReady primeiro, antes de parar de servir. Depois espera uma janela pré-parada limitada, para o orquestrador poder tirar o pod do serviço antes do encerramento das conexões. O endpoint /healthz fica em 200 o tempo todo, então o orquestrador não mata o pod no meio da drenagem. Ele então desmonta em ordem segura por dependência (HTTP, depois consumidor, depois dispatcher, depois as aplicações de segundo plano, depois os clientes Kafka, depois o pool, depois a telemetria).
O /version (identidade do build) e o /runtime (um retrato barato do runtime Go) completam a superfície operacional sem autenticação para triagem de incidentes.
Configuração essencial
O Streaming Hub lê a configuração de variáveis de ambiente
STREAMING_HUB_*, mais as variáveis compartilhadas MULTI_TENANT_*, PLUGIN_AUTH_* e OTEL_* e a ENV_NAME sem prefixo. O inventário completo, com cada padrão, fica na referência de ambiente do serviço. As variáveis que você define com mais frequência:
Remover uma URL do
STREAMING_HUB_MANIFEST_SOURCES interrompe as futuras atualizações daquele produtor, mas mantém as linhas de catálogo dele que funcionavam por último. A atualização de manifesto é apenas descoberta no control plane. Uma queda de produtor não bloqueia a ingestão de eventos nem a correspondência de entrega.
Valores de segredo nunca cabem em configuração comitada. Você referencia a KEK pelo nome da variável de ambiente em que a camada de deploy a injeta (STREAMING_HUB_KEK_REF). O hub lê o material daquela variável nomeada e nunca o registra em log. O material de SASL e TLS do Kafka no nível de deploy, a chave de API de serviço do Tenant Manager e as credenciais do Redis devem vir do seu cofre de segredos. As credenciais M2M por tenant para a descoberta de manifesto de produtor continuam no Secrets Manager.
Forense de DLQ
O
GET /admin/dlq é a superfície de forense do operador para observações de dead-letter. Ele é entre tenants por projeto. O escopo de admin da lib-auth o controla, ele não carrega shim de tenant e devolve registros de todos os tenants. Por isso ele não faz parte da API /v1 voltada ao cliente.
As observações de dead-letter que ele lê servem apenas à observabilidade. Elas vêm dos tópicos de dead-letter de produtores upstream, e o hub nunca as reentrega. Use-o para investigar por que registros falharam upstream. Ele não os reproduz.
Conciliador de tópicos
O conciliador de tópicos é um detector de desvio apenas de leitura, habilitado por padrão (
STREAMING_HUB_RECONCILER_ENABLED). A cada passada ele compara os tópicos vivos do broker, o catálogo de eventos e os alvos distintos de subscription. Ele sinaliza três tipos de desvio:
- tópicos fantasma: um tópico seguido sem entrada de catálogo.
- subscriptions mortas: um tipo de evento e major assinado sem entrada viva de catálogo.
- quebras de atraso contra retenção.
Observabilidade
O Streaming Hub exporta suas métricas, traces e logs por OTLP (lib-observability), apontado para o collector em
OTEL_EXPORTER_OTLP_ENDPOINT. É ali que ficam as métricas streaming_hub_* de verdade.
O endpoint
/metrics é quase vazio por projeto: ele serve apenas o medidor estático streaming_hub_build_info. Colete as métricas de verdade do hub no seu collector OTLP, não no /metrics.Próximos passos
Como o Streaming Hub funciona
As entranhas da entrega por trás das superfícies operacionais acima.
Gerenciar subscriptions
As operações de control plane que seus tenants usam.

