Hi,
There are a couple of things I have in mind to improve this, but sometimes it's easier to be more interactive than email.
Anyway, couple of ideas/questions:
* what's your EPS rate? I can see 200000 messages on a 5 minute interval, which translates to 666 EPS, does that sounds right?
* your UDP settings look legit: flow control is enabled, but you have a high log-iw-size(). This means that flow control should not clog you down if the destination does not accept messages for more than 375 seconds (250000/666)
* you have use-dns() enabled, which means that syslog-ng will do a DNS lookup for incoming logs, which might clog the system while names are being resolved. DNS is cached though.
* you have reliable(yes) set in the queue, you should be fine with reliable(no) and that should improve disk buffering performance a lot
* you could implement UDP source load balancing, by using so-reuseport() and you could even add eBPF load balancing. But 666 messages a second is not a disaster, so a single source code work.
I would look at more metrics and over time. It is important to see what happens on that syslog server. Since your UDP settings seem to be ok, I'd check these:
1) does your destination consume messages at the required rate? I'd start recording the destination stats and see if the processed counter is moving or not
2) delay metrics, how much time a message spends in the disk buffer.
3) number of messages stored in the disk buffer and how they change over time