NTP is really not that good. I'm looking at "chronyc sources" on my GPS-disciplined clock, and relative to GPS time, the NTP sources are +/- 100s of milliseconds off. I'm sure most of this is the flakiness intrinsic in a consumer-grade ISP, but even after measuring them over a long period of time they tend to drift at about 1 part per million. (That's a second off every 12 days.) Comparatively, a tuned TXCO connected to the same clock is about 0.009 parts per million off, and many would consider that unacceptable.
GPS is actually an extremely good time reference. On the ground, you can be sure of the time to about 50ns, and the internal clocks on the satellites are kept synchronized to UTC time. (Which variant of UTC depends on the satellite constellation. The US uses the US Naval Observatory for GPS; China has their own version of UTC for BeiDou, etc.)
What is normal for NTP is to have an error not greater than 10 millisecond.
If you see such huge NTP errors, you should change your reference NTP servers. Make sure to have more of them, e.g. at least 4 or 5, and they should be from some reputable sources, not from your local ISP.
Also make sure that your hardware RTC clock is adjusted to the value of the NTP clock at power-off, to prevent a large difference between the RTC clock and NTP at power-on, which would require a long time for the local time to reach the network time. For the same reason, your NTP might need to be configured to make a time jump at startup, instead of trying to very slowly diminish the initial difference, which could be of many seconds with a poor RTC clock.
I just pick 4 random servers from the Debian pool to monitor, but my reference clock is GPS time. The RTC on the board has been carefully calibrated to be accurate to 10 parts per billion.
time.cloudflare.com seems to be the worst. It's stratum 3 which is weird for an infrastructure company to be operating. (I dunno, maybe someone just made a shitty NTP server and set their reverse DNS to cloudflare. I didn't investigate.)
I have just checked my NTP server, and it's funny that I also see a bad time.cloudflare.com, among a set of 4 random NTP servers from the FreeBSD pool.
Even if the time.cloudflare.com is much closer to me than the other servers, at 8 ms delay, it also has a large offset of around 3 ms from the true time.
While that is much worse than the other servers, it is still 2 orders of magnitude away from the hundreds of ms of your case.
Besides the 4 random servers from a pool, I also use 4 individually selected NTP servers. For example, because I live in Europe, one of them is the NTP server of the French astronomical observatory (Observatoire de Paris, SYRTE).
I have been using NTP for decades and I typically see on my own NTP server (from my home) an offset less than 0.2 ms with a jitter between 1 ms and 2 ms, while the delays to the reference servers vary between 8 ms and 250 ms, with most between 40 ms and 60 ms.
I have configured NTP on a large number of computers and I have never seen offsets above 10 ms, but it is true that most of them had reasonably good Internet access, over Ethernet, TV cable, optical fiber or high quality wireless links.
I can imagine that a very bad Internet access, with highly variable delays to the reference servers might confuse NTP, but I have no longer seen such cases since around 2001/2002, i.e. since the last time when I have used dial-up access over a phone modem.
GPS is actually an extremely good time reference. On the ground, you can be sure of the time to about 50ns, and the internal clocks on the satellites are kept synchronized to UTC time. (Which variant of UTC depends on the satellite constellation. The US uses the US Naval Observatory for GPS; China has their own version of UTC for BeiDou, etc.)