You are right. If all replicas happen to fail at the same time, then even
with ack=everyone your acked sent messages may still be lost. As Kafka
replication documents stated, with N replicas it can tolerate N-1
concurrent failures, hence if you are really unlucky and get N concurrent
failures then replication will not be prevent data loss.

Guozhang

On Tue, Feb 28, 2017 at 5:54 PM, Jiecxy <253441...@qq.com> wrote:

> Hi Guozhang,
>
> Thanks for your reply. I’m still confused. I checked the source code.Kafka
> just uses the class FileChannel.write(buffer) to write the data on the
> broker, it puts the data in the memory instead of disk. Only you set the
> FileChannel.force(true), it will flush the data to the disk. I understand
> the ack mode, but it just requires the isr to receive the data then return
> the response, in fact, it doesn’t require them to flush the data to the
> disk. Am I right? Anything wrong?
> So my question is, since the flush appears only after called explicitly
> (or relying on the os), so it is still possible for kafka to loss data
> (like broker down before the data are flushed to the disk)?
>
> Thanks
> Chen
>
> > 在 2017年2月27日,02:52,Guozhang Wang <wangg...@gmail.com> 写道:
> >
> > Hello Chen,
> >
> > Kafka flushes data to disk (i.e. fsync) asynchronously. Based on the
> > ack.mode it will return the response of the produce request to producer
> > after it has been replicated (likely in memory) on N partition replicas.
> >
> >
> > Guozhang
> >
> > On Sun, Feb 26, 2017 at 1:39 AM, Jiecxy <253441...@qq.com> wrote:
> >
> >> Hi guys,
> >>
> >>    Does kafka send the acks response to the producer  after flush the
> >> messages to the disk or just keep them in the memory?
> >>    How does Kafka flush the messages? By calling the system call, like
> >> fsync()?
> >>
> >> Thanks
> >> Chen
> >>
> >>
> >
> >
> > --
> > -- Guozhang
>
>
>
>


-- 
-- Guozhang

Reply via email to