Giter Club home page Giter Club logo

metamorphosis's Issues

Choose broker when running consumer

When starting a consumer via command php artisan kafka:consume, it would be nice to have an option to change what broker this will use to run the command.

An option like:
$ php artisan kafka:consume offers --broker=some-other-broker

Producer is not working in PHP 8.1

Estamos migrando alguns de nossos serviços para o PHP 8.1 e nesse processo a produção de mensagens parou de funcionar.

Após algum tempo de análise identificamos que o problema foi causado por uma breaking change do rdkafka 4, onde ele parou de enviar as mensagens durante a "destruição" de seus objetos.

https://github.com/arnaud-lb/php-rdkafka/releases/tag/4.0.0

Mesmo antes da migração o código aparentemente funcionava por um erro. É esperado que as mensagens sejam enviadas conforme um poll de mensagens, mas não é o que acontece.

Ao fim da execução do Metamorphosis::produce todos os objetos do rdkafka e muitos do metamorphosis são destruídos, pois não tem nada que segure uma referencia dos objetos.

O rdkafka 3 faz um flush durante a destruição dos seus objetos, dando a impressão que esta tudo funcionando. Já o rdkafka 4+ não faz, evidenciando o problema.

Segue um código simples que funciona no rdkafa 3 e não funciona no rdkafka 4 que ilustra o mesmo comportamento do Metamorphosis::produce:

function produce () {
    $conf = new RdKafka\Conf();
    $conf->set('metadata.broker.list', 'kafka:9092');

    $producer = new RdKafka\Producer($conf);

    $topic = $producer->newTopic("test");
    $topic->produce(RD_KAFKA_PARTITION_UA, 0, "Message payload 1 " . random_int(1000, 9999));
    $producer->poll(0);
}

// Como nada faz referencia aos objetos do rdkafka os mesmos são destruidos.
// no rdkafka 3 um flush é executado durante a destruição dos seus objetos
// no rdfaka 4 esse flush não acontece
produce();
sleep(10);

Segue um outro exemplo de um código que funciona, removendo esse comportamento da destruição dos objetos:

$conf = new RdKafka\Conf();
$conf->set('metadata.broker.list', 'kafka:9092');

$producer = new RdKafka\Producer($conf);

$topic = $producer->newTopic("test");
$topic->produce(RD_KAFKA_PARTITION_UA, 0, "Message payload 1 " . random_int(1000, 9999));
$producer->poll(0);

// as mensagens são enviadas durante o sleep
sleep(10);

Como uma solução paliativa, configuramos o Metamorphosis para funcionar de forma sincronia e com required_acknowledgment ativado.

Em alguns de nossos projetos o problema não ocorre pois estamos usando as classes internas do Metamorphosis ao invés do métodoMetamorphosis::produce, segurando as instancias necessárias em memória durante toda a execução do script.

Add vendor namespace

It seems to me that we should prefix our namespace with \LeroyMerlin or \LeroyMerlinBr

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.