Cool, good to know.

On Fri, Jul 26, 2013 at 2:00 PM, Jason Rosenberg <j...@squareup.com> wrote:

> Jay,
>
> My only experience so far with this is using XFS.  It appears the XFS
> behavior is evolving, and in fact, we see somewhat different behavior from
> 2 of our CentOS kernel versions in use.  I've been trying to ask questions
> about all this on the XFS.org mailing list, but so far, having not much
> luck understanding the xfs versioning correlated to CentOS versions.
>
> Anyway, yes, I think it would definitely be worth trying the solution you
> suggest, which would be to close the file on rotation, and re-open
> read-only.  Or to close files after a few hours of not being accessed.   If
> a patch for one of these approaches can be cobbled together, I'd love to
> test it out on our staging environment.  I'd be willing to experiment with
> such a patch myself, although I'm not 100% of all the places to look (but
> might dive in).
>
> Xfs appears to the option of using dynamic, speculative preallocation, in
> which case it progressively doubles the amount of space reserved for a
> file, as the file grows.  It does do this for all open files.  If the file
> is closed, it will then release the preallocated space not in use.  It's
> not clear whether this releasing of space happens immediately on close, and
> whether re-opening the file read-only immediately, will keep it from
> releasing space (still trying to gather more info on that).
>
> I haven't looked too much at the index files, but those too appear to have
> this behavior (e.g. preallocated size is always on the order of double the
> actual size, until the app is restarted).
>
> Jason
>
>
> On Fri, Jul 26, 2013 at 12:46 PM, Jay Kreps <jay.kr...@gmail.com> wrote:
>
> > Interesting.
> >
> > Yes, Kafka keeps all log files open indefinitely. There is no inherent
> > reason this needs to be the case, though, it would be possible to LRU out
> > old file descriptors and close them if they are not accessed for a few
> > hours and then reopen on the first access. We just haven't implemented
> > anything like that.
> >
> > It would be good to understand this a little better. Does xfs
> pre-allocate
> > space for all open files? Perhaps just closing the file on log role and
> > opening it read-only would solve the issue? Is this at all related to the
> > use of sparse files for the indexes (i.e.
> RandomAccessFile.setLength(10MB)
> > when we create the index)? Does this effect other filesystems or just
> xfs?
> >
> > -Jay
> >
> >
> > On Fri, Jul 26, 2013 at 12:42 AM, Jason Rosenberg <j...@squareup.com>
> > wrote:
> >
> > > It looks like xfs will reclaim the preallocated space for a file, after
> > it
> > > is closed.
> > >
> > > Does kafka close a file after it has reached it's max size and started
> > > writing to the next log file in sequence?  Or does it keep all open
> until
> > > they are deleted, or the server quits (that's what it seems like).
> > >
> > > I could imagine that it might need to keep log files open, in order to
> > > allow consumers access to them.  But does it keep them open
> indefinitely,
> > > after there is no longer any data to be written to them, and no
> consumers
> > > are currently attempting to read from them?
> > >
> > > Jason
> > >
> > >
> > > On Tue, Jul 16, 2013 at 4:32 PM, Jay Kreps <jay.kr...@gmail.com>
> wrote:
> > >
> > > > Interesting. Yes it will respect whatever setting it is given for new
> > > > segments created from that point on.
> > > >
> > > > -Jay
> > > >
> > > >
> > > > On Tue, Jul 16, 2013 at 11:23 AM, Jason Rosenberg <j...@squareup.com>
> > > > wrote:
> > > >
> > > > > Ok,
> > > > >
> > > > > An update on this.  It seems we are using XFS, which is available
> in
> > > > newer
> > > > > versions of Centos.  It definitely does pre-allocate space as a
> file
> > > > grows,
> > > > > see:
> > > > >
> > > > >
> > > >
> > >
> >
> http://serverfault.com/questions/406069/why-are-my-xfs-filesystems-suddenly-consuming-more-space-and-full-of-sparse-file
> > > > >
> > > > > Apparently it's not hard-allocated space, and would be released
> under
> > > > > resource pressure....seems we may need to update how we monitor
> disk
> > > > space
> > > > > usage, etc....
> > > > >
> > > > > But, it seems that the default log file size of 1.1Gb, causes it to
> > > jump
> > > > to
> > > > > preallocate an extra Gb.  So, in theory, if  I set a strategic log
> > file
> > > > > size to be just under the threshold that forces it to exponentially
> > > > double
> > > > > the size from 1Gb to 2Gb, I should be able to mostly solve this
> > issue.
> > > > >  E.g. use 950Mb instead of 1.1Gb max log file size.
> > > > >
> > > > > If I change the max log file size for a broker, and restart it,
> will
> > it
> > > > > respect the new size going forward?
> > > > >
> > > > > Jason
> > > > >
> > > > >
> > > > > On Sun, Jul 14, 2013 at 9:44 AM, Jay Kreps <jay.kr...@gmail.com>
> > > wrote:
> > > > >
> > > > > > Hey Jason,
> > > > > >
> > > > > > As Jun says, we haven't seen that issue and no one else has
> > reported
> > > > that
> > > > > > but it sounds like a bug of some kind.
> > > > > >
> > > > > > In 0.7 we don't do any preallocation of anything. The only time
> > files
> > > > > > shrink is during recovery--we re-checksum all messages that may
> not
> > > > have
> > > > > > been flushed and if any invalid messages are found we truncate
> them
> > > > off.
> > > > > > This would only occur after an unclean shutdown (kill -9) and you
> > > would
> > > > > get
> > > > > > a bunch of errors in log warning you this was happening.
> > > > > >
> > > > > > -Jay
> > > > > >
> > > > > >
> > > > > >
> > > > > > On Sun, Jul 14, 2013 at 1:36 AM, Jason Rosenberg <
> j...@squareup.com
> > >
> > > > > wrote:
> > > > > >
> > > > > > > An update on this.  It appears that the phenomenon I'm seeing
> is
> > > that
> > > > > > disk
> > > > > > > space is freed on restart, but it's not due files getting
> deleted
> > > on
> > > > > > > restart, but instead files are getting truncated on restart.
>  It
> > > > > appears
> > > > > > > that log files get pre-allocated to a larger size than is used
> > > right
> > > > > > away.
> > > > > > >  Upon restart, they get truncated to the size of the file that
> > > > actually
> > > > > > > contains data.  Does this make sense?
> > > > > > >
> > > > > > > Before restart, I see a large number of log files size 2.1Gb.
> >  Upon
> > > > > > > restart, the disk space reclaimed drops to almost half that, on
> > > > > average.
> > > > > > >
> > > > > > > Thoughts?
> > > > > > >
> > > > > > > Jason
> > > > > > >
> > > > > > >
> > > > > > > On Thu, May 23, 2013 at 8:55 PM, Jun Rao <jun...@gmail.com>
> > wrote:
> > > > > > >
> > > > > > > > I haven't seen this issue before. We do have ~1K topics in
> one
> > of
> > > > the
> > > > > > > Kafka
> > > > > > > > clusters at LinkedIn.
> > > > > > > >
> > > > > > > > Thanks,
> > > > > > > >
> > > > > > > > Jun
> > > > > > > >
> > > > > > > >
> > > > > > > > On Thu, May 23, 2013 at 11:05 AM, Jason Rosenberg <
> > > > j...@squareup.com>
> > > > > > > > wrote:
> > > > > > > >
> > > > > > > > > Yeah, that's what it looks like to me (looking at the
> code).
> > >  So,
> > > > > I'm
> > > > > > > > > guessing it's some os level caching, resource recycling.
> >  Have
> > > > you
> > > > > > ever
> > > > > > > > > heard of this happening?  One thing that might be different
> > in
> > > my
> > > > > > usage
> > > > > > > > > from the norm is a relatively large number of topics (e.g.
> > ~2K
> > > > > > topics).
> > > > > > > > >
> > > > > > > > > Jason
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > On Thu, May 23, 2013 at 7:14 AM, Jun Rao <jun...@gmail.com
> >
> > > > wrote:
> > > > > > > > >
> > > > > > > > > > Jason,
> > > > > > > > > >
> > > > > > > > > > Kafka closes the handler of all delete files. Otherwise,
> > the
> > > > > broker
> > > > > > > > will
> > > > > > > > > > run out of file handler quickly.
> > > > > > > > > >
> > > > > > > > > > Thanks,
> > > > > > > > > >
> > > > > > > > > > Jun
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > On Wed, May 22, 2013 at 10:17 PM, Jason Rosenberg <
> > > > > > j...@squareup.com>
> > > > > > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > > So, does this indicate kafka (or the jvm itself) is not
> > > > > > > aggressively
> > > > > > > > > > > closing file handles of deleted files?  Is there a fix
> > for
> > > > > this?
> > > > > > >  Or
> > > > > > > > is
> > > > > > > > > > > there not likely anything to be done?  What happens if
> > the
> > > > disk
> > > > > > > fills
> > > > > > > > > up
> > > > > > > > > > > with file handles for phantom deleted files?
> > > > > > > > > > >
> > > > > > > > > > > Jason
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > On Wed, May 22, 2013 at 9:50 PM, Jonathan Creasy <
> > > j...@box.com
> > > > >
> > > > > > > wrote:
> > > > > > > > > > >
> > > > > > > > > > > > It isn't uncommon if a process has an open file
> handle
> > > on a
> > > > > > file
> > > > > > > > that
> > > > > > > > > > is
> > > > > > > > > > > > deleted, the space is not freed until the handle is
> > > closed.
> > > > > So
> > > > > > > > > > restarting
> > > > > > > > > > > > the process that has a handle on the file would cause
> > the
> > > > > space
> > > > > > > to
> > > > > > > > be
> > > > > > > > > > > freed
> > > > > > > > > > > > also.
> > > > > > > > > > > >
> > > > > > > > > > > > You can troubleshoot that with lsof.
> > > > > > > > > > > > Normally, I see 2-4 log segments deleted every hour
> in
> > my
> > > > > > > brokers.
> > > > > > > >  I
> > > > > > > > > > see
> > > > > > > > > > > > log lines like this:
> > > > > > > > > > > >
> > > > > > > > > > > > 2013-05-23 04:40:06,857  INFO [kafka-logcleaner-0]
> > > > > > > log.LogManager -
> > > > > > > > > > > > Deleting log segment 00000000035434043157.kafka from
> > > > > <redacted
> > > > > > > > topic>
> > > > > > > > > > > >
> > > > > > > > > > > > However, it seems like if I restart the broker, a
> > massive
> > > > > > amount
> > > > > > > of
> > > > > > > > > > disk
> > > > > > > > > > > > space is freed (without a corresponding flood of
> these
> > > log
> > > > > > > segment
> > > > > > > > > > > deleted
> > > > > > > > > > > > messages).  Is there an explanation for this?  Does
> > kafka
> > > > > keep
> > > > > > > > > > reference
> > > > > > > > > > > to
> > > > > > > > > > > > file segments around, and reuse them as needed or
> > > > something?
> > > > > >  And
> > > > > > > > > then
> > > > > > > > > > or
> > > > > > > > > > > > restart, the references to those free segment files
> are
> > > > > > dropped?
> > > > > > > > > > > >
> > > > > > > > > > > > Thoughts?
> > > > > > > > > > > >
> > > > > > > > > > > > This is with 0.7.2.
> > > > > > > > > > > >
> > > > > > > > > > > > Jason
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to