Hi Fred and Greg, Thanks for your feedback and it really not straightforward but interesting! There are some behavior I expect.
The current producer uses the *RecordAccumulator* to gather records, and the sender thread sends them in batches. We can track each record’s acknowledgment setting as it appends to the *RecordAccumulator*, allowing the *sender *to group batches by acknowledgment levels and topicPartition when processing. Regarding the statement, "Callbacks for records being sent to the same partition are guaranteed to execute in order," this is ensured when *max.inflight.request *is set to 1. We can send records with different acknowledgment levels in the order of acks-0, acks=1, acks=-1. Since we need to send batches with different acknowledgment levels batches to the broker, the callback will execute after each request is completed. In response to, "If so, are low-acks records subject to head-of-line blocking from high-acks records?," I believe an additional configuration is necessary to control this behavior. We could allow records to be either sync or async, though the callback would still execute after each batch with varying acknowledgment levels completes. To measure behavior across acknowledgment levels, we could also include acks in *ProducerIntercepor*. Furthermore, before this KIP, a producer could only include one acks level so sequence is premised. However, with this change, we can *ONLY* guarantee the sequence within records of the same acknowledgment level because we may send up to three separate requests to brokers. Best, TaiJuWu TaiJu Wu <tjwu1...@gmail.com> 於 2024年11月6日 週三 上午10:01寫道: > Hi Fred and Greg, > > Apologies for the delayed response. > Yes, you’re correct. > I’ll outline the behavior I expect. > > Thanks for your feedback! > > Best, > TaiJuWu > > > Greg Harris <greg.har...@aiven.io.invalid> 於 2024年11月6日 週三 上午9:48寫道: > >> Hi TaiJuWu, >> >> Thanks for the KIP! >> >> Can you explain in the KIP about the behavior when the number of acks is >> different for individual records? I think the current description using >> the >> word "straightforward" does little to explain that, and may actually be >> hiding some complexity. >> >> For example, the send() javadoc contains this: "Callbacks for records >> being >> sent to the same partition are guaranteed to execute in order." Is this >> still true when acks vary for records within the same partition? >> If so, are low-acks records subject to head-of-line-blocking from >> high-acks >> records? It seems to me that this feature is useful when acks is specified >> per-topic, but introduces a lot of edge cases that are underspecified. >> >> Thanks, >> Greg >> >> >> On Tue, Nov 5, 2024 at 4:52 PM TaiJu Wu <tjwu1...@gmail.com> wrote: >> >> > Hi Chia-Ping, >> > >> > Thanks for your feedback. >> > I have updated KIP based on your suggestions. >> > >> > Best, >> > Stanley >> > >> > Chia-Ping Tsai <chia7...@apache.org> 於 2024年11月5日 週二 下午4:41寫道: >> > >> > > hi TaiJuWu, >> > > >> > > Q0: Could you please add getter (Short acks()) to "public interface" >> > > section? >> > > >> > > Q1: Could you please add RPC json reference to prove "been available >> at >> > > the RPC-level," >> > > >> > > Q2: Could you please add link to producer docs to prove "share a >> single >> > > producer instance across multiple threads" >> > > >> > > Thanks, >> > > Chia-Ping >> > > >> > > On 2024/11/05 01:28:36 吳岱儒 wrote: >> > > > Hi all, >> > > > >> > > > I open a KIP-1107: Adding record-level acks for producers >> > > > < >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-1107%3A++Adding+record-level+acks+for+producers >> > > > >> > > > to >> > > > reduce the limitation associated with reusing KafkaProducer. >> > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-1107%3A++Adding+record-level+acks+for+producers >> > > > >> > > > Feedbacks and suggestions are welcome. >> > > > >> > > > Thanks, >> > > > TaiJuWu >> > > > >> > > >> > >> >