It's a bit complicated 😉 If you want the full picture (but you might get overwhelmed and a bit confused), see the Masa Diagrams - https://community.splunk.com/t5/Getting-Data-In/Diagrams-of-how-indexing-works-in-the-Splunk-platform-the-Masa/m-p/590774 The one that will be of interest to you is the last one - the one with a separate forwarder. Simplifying a bit it works like this: 1. A forwarder has inputs 2. Inputs push data (in case of UF the data doesn't have to be broken into single events yet but that's not important here) into the main pipelines (by default one, but there can be more). 3. From the pipeline the events go to the output(s). And now there can be some other stuff which can cause issues if you tweaked the internal Splunk queues but generally, you have fairly small queues which are responsible for current data processing within the forwarder process. What is important is that: 1) If the data cannot be sent out (network outage, indexers disaster, whatever), there is a pushback on the overall pipeline so the outputs block and almost immediately the inputs get notified that theh have nowhere to send to. 2) Some inputs (if they aren't explicitly configured to not do that) will stop reading from their sources as soon as it happens - most notable examples are file monitor input or windows eventlog input. In that case the forwarders simply wait for the output to "unclog" and then resume reading and sending data. The caveat is that if you have sufficiently long outage period on the output side, the source can eventually "roll over" some files or events in eventlog channels which appeared during the outage period might get rotated out of existence during that outage period. 3) Other inputs (typically those that passively receive data like network ports, HEC inputs) can use persistent queues which save the queue contents on disk so if there is an "output outage" they can handle even more data than the UF actually has memory. It's a case for just this type of scenarios. So to sum up your questions: 1. Technically the UF can hold in its memory some limited buffer of event data and - if configured - can store on disk a significantly larger (but still finite) buffer of input data. 2. It all depends on your configuration and resources. If you have a small "forwarding only" UF which is meant to just receive and send as soon as it gets the data and don't have much local storage to even configure persistent queue onto, you're limited not even by UF but by physics 😉 3. The normal procedure is that if an UF cannot contact the destination server it makes some more attempts then - if still unsuccessful - puts a particular output into quarantine for a fixed amount of time (so that it doesn't waste time and resources retrying to connect to an apparently unavailable server). If there are more outputs in the output group, UF just skips the quarantined output when choosing which output to send data to or if there are no working outputs in that group, it just blocks the output group (and then the whole thing I described above happens). If the quarantine period for a given output passes, UF retries connecting that output. If it succeeds, the output works. If it fails, it gets requarantined and the process repeats after another quarantine period passes. So unless you encounter some error in the code, the output should resume on its own after a short time. 4. Well... Generally the best practice is to avoid shutting down the cluster as a whole. If you absolutely must, just put your cluster into maintenance mode so it doesn't start replicating data wildly as soon as you bring the first one down, and shut down your indexers. You can consider putting all your indexers into manual detention before shutting them down so that the sources do not fail over to the last remaining one(s) overloading them with data just before shutdown.
... View more