This looks like a flush. Let's take a look at the action:
We raise 4BB and he calls. Nothing out of the ordinary. Because his VPIP is so low, we can probably put him off of random suited connectors (even the 9dTd elephant in the room!). ATo+, KTs+, QJs, 66+ is a comfortable range I can put him on.
He opts for a 1/2 pot bet. Because he is a 21/0, we can safely assume that he hit something. If he has something like 9T and is going for the nutty draw, he likely checks on this street to see some more free cards. The range we have left is AJ, KJ, QJ, JJ+. The only hand that's nuttier than ours is the JJ. He calls on 1-to-1 odds, which is a signal that he's not trying to see any new cards. He thinks he has the best hand, which is great for us, because we get to go crazy with value bets.
Villain checks on turn, and we make a very standard 1/2 pot bet. We get called, which is not surprising considering he probably thinks he has us beat. The range of hands he's on doesn't really change.
As a side note, I like betting bigger here. A 1/2 pot is standard, but now we're defending our set against a potential flush draw and a straight draw. By betting 1/2 pot, we're giving villain 3-to-1 odds, which is good enough for a flush draw to call.
River shove, to me, looks like he hit the flush nuts (or King set). By pot odds, I think we're beating enough of the turn's range, but we're not beating enough of the river shove range. Given that he is a 21/0 player, we can pretty safely assume that he's bluffing here a small enough percentage here that we can't call for value. His range, unfortunately, also includes JJ, QQ, and KK. The cards in his range that aren't beating us (from the Turn call) are Aces (6) and AJ, KJ, QJ non diamonds (45), which is 51 hands total. He has 21 hands that beat us. Given that he bluffs 20% of the time here (generous), we still need 2-to-1 odds to call here.
We're beat, time to fold. I think the play that could have turned this around was to try and end the action on the turn. It seems that you gave the villain too good of odds to complete his flush draw, and you were punished for it.