The visitors were gifted the opening goal in the fifth minute when Cancelo acrobatically crossed for Ruben Dias to head into an empty net after a mix-up between Newcastle goalkeeper Martin Dubravka and defender Ciaran Clarke.
Cancelo added a second in the 27th minute, cutting in from the right wing and capping off a solo run with a stunning strike to silence the home crowd.
Newcastle were denied what looked to be a clear penalty on the half-hour mark when City keeper Ederson clattered into Ryan Fraser, but neither referee Martin Atkinson nor the VAR decided to intervene.