Janneman Malan's 121 and a Tabraiz Shamsi five-for led South Africa to a 67-run win by DLS in a rain-affected second ODI against Sri Lanka, levelling the three-match series in Colombo.

A downpour delayed the start and limited the contest to 47 overs, which became 41 in the second innings after more rain – Sri Lanka's target of 284 trimmed to 265.

But the Proteas were never in trouble. Despite missing injured captain Temba Bavuma and the rested Quinton de Kock, stand-in skipper Keshav Maharaj was quickly rewarded for his decision to bat first.

Opener Malan stuck around for three hours and 17 minutes, during which time he enjoyed stands of 96 for the second wicket with Reeza Hendricks (51) and 86 for the fourth with Heinrich Klaasen (43).

Dushmantha Chameera belatedly got Klaasen and Malan from consecutive deliveries, but by that point there were just 12 balls remaining, with South Africa finishing on 283-6.

Given Avishka Fernando had been the match-winner for Sri Lanka in the series opener, making at least 50 in a third consecutive ODI, it quickly became clear this would not be their day when he went early for eight to a much-improved Kagiso Rabada (2-16).

Charith Asalanka starred alongside Avishka in the previous match and only he truly threatened to make a fight of the chase, scoring 77 off 69 – including three sixes – either side of the rain delay.

Chamika Karunaratne's late flurry (36 off 23, two sixes) was then ended by Maharaj, and Shamsi tidied up the tail for career-best figures of 5-49, leaving Sri Lanka well short, all out for 197.

Patient approach pays off

Sri Lanka's pace bowling attack has been effective in preventing boundaries this year, giving up just 44 per cent of their total runs conceded through fours and sixes ahead of this match – the second-lowest proportion among Test-playing nations in 2021, behind Bangladesh (42 per cent). But this did not slow Malan, who hit only 10 of the 135 balls he faced to the boundary but ran 65 singles, perhaps explaining his struggles with cramp.

Rabada back to his best

A poor showing from the Proteas' premier fast bowler in the first ODI saw him give up 66 runs, tied for the third-most in his career in this format. Yet Rabada was back on song from the outset on Saturday. He took two wickets in a stunning fifth over, conceding only a single run and prompting a further lbw review.

Rabada's contribution was overshadowed by Shamsi's efforts, but the Proteas need their main man to fire, meaning an ankle sprain in the field provides some concern.