Hi Luke and Kafka Dev Team, Any interest in making Kafka Producer non-blocking when Broker is down and when the metadata refresh cache does not have topic details? This seems to be a missing piece when it comes to Kafka Producer not being able to handle state when it is really down vs metadata refresh is not available.
I hope there is enough interest to make this producer broker down vs metadata not available. Thanks, Bhavesh On Mon, Oct 10, 2022 at 4:04 PM Bhavesh Mistry <mistry.p.bhav...@gmail.com> wrote: > Hi Luke, > > Thanks for the pointers. > > Sorry for being late I was out. > > > > I would like to propose the following which might be a little different > from the Old one: > > Kafka Producer must distinguish between *broker down state* vs *metadata > NOT available* for a given topic. > > > > Like the boot-strap server option, many applications (like ours) do not > dynamically create topics and publish/subscribe to predefine topics. So, > the Kafka producer can have a configuration option to “*predefine-topics*”. > When a predefine-topic is configured, Metadata is fetched for those > pre-defined topics before the producer is initialized. Also, these > pre-defined topics will always guarantee that Metadata will be refreshed > before it expires meaning (the metadata cache will expire at X time, then > the producer should automatically fetch metadata refresh request X-(3000) > ms so the cache will always have the latest mapping of topic partition > states continue to fetch everyone seconds till it expires cache X-2000 and > X-1000). This will guarantee the non-blocking behavior for pre-defined > topics. Blocking behavior is acceptable for topics that are NOT defined > ahead of time or dynamic topics. > > > > Another configuration we should have is to *drop-message-on-broker-down* > (true or false), even if the metadata has expired just DROP the message > till the broker is online. Do NOT block the application thread which puts > stuff on the Kafka in-memory queue. Of course, the Kafka producer will > have to keep track of all brokers and it states the in-memory data > structure and update it periodically (when send is a success or ping to > port (IP: port) is a success). > > > > Luke and others let me know what you think about it. > > > I can write documents if there is interest in the topic. > > > Thanks, > > > Bhavesh > > > On Sun, Sep 25, 2022 at 8:44 PM Luke Chen <show...@gmail.com> wrote: > >> Hi Bhavesh, >> >> I understand your point. >> There was an old KIP with the similar idea which was not accepted by the >> community in the end. >> Maybe you can try to bring it back to the community again, or try to >> propose your own KIP for this idea? >> >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-286%3A+producer.send%28%29+should+not+block+on+metadata+update >> >> Thank you. >> Luke >> >> On Sat, Sep 24, 2022 at 6:36 AM Bhavesh Mistry < >> mistry.p.bhav...@gmail.com> >> wrote: >> >> > Hello Kafka Team, >> > >> > I would appreciate any insight into how to distinguish between Brocker >> Down >> > vs Metadata Refresh not available due to timing issues. >> > >> > Thanks, >> > >> > Bhavesh >> > >> > On Mon, Sep 19, 2022 at 12:50 PM Bhavesh Mistry < >> > mistry.p.bhav...@gmail.com> >> > wrote: >> > >> > > Hello Kafka Team, >> > > >> > > >> > > >> > > We have an environment where Kafka Broker can go down for whatever >> > reason. >> > > >> > > >> > > >> > > Hence, we had configured MAX_BLOCK_MS_CONFIG=0 because we wanted to >> drop >> > > messages when brokers were NOT available. >> > > >> > > >> > > >> > > Now the issue is we get data loss due to METADATA not being available >> and >> > > get this exception “*Topic <topic> not present in metadata after 0 >> ms.”. >> > > *This is due to the fast metadata has expired and the next request to >> > > send an event does not have metadata. >> > > >> > > >> > > >> > > Why does Kafka have his design? Why can’t Kafka distinguish between >> > > Broker down vs metadata refresh not available? Is it reasonable to >> > expect >> > > metadata would refresh BEFORE it expires so metadata refresh doesn’t >> need >> > > before it expires? Have Metadata ready before expires? Any particular >> > > reason send() has wait for metadata refresh vs background thread that >> > > automatically refreshes metadata before it expires, hence send() >> method >> > > never incur wait(). >> > > >> > > >> > > Let me know what suggestion you have to prevent the application thread >> > > from blocking (MAX_BLOCK_MS_CONFIG) when the Kafka brokers are DOWN vs >> > > metadata is NOT available due to expiration. >> > > >> > > >> > > >> > > Let me know your suggestions and what you think about metadata >> refresh. >> > > Should Kafka Producer be proactively refreshing metadata intelligently >> > > rather than what the producer does today? >> > > >> > > >> > > >> > > >> > > >> > > Thanks, >> > > Bhavesh >> > > >> > >> >