It only works with whole files and it chews up an immense amount of CPU time. ZFS replication works at the block level and doesn't need to check the whole filesystem just to see what's changed - it just sends snapshots and is therefore more efficient.
I think this could use some qualification.
rsync transfers only the changed parts of existing files. It can even use other files as the basis for partial transfer of new files in the right circumstances. Perhaps when you said "only works with whole files" you meant "in contrast to working at the block level". Definitely room for confusion.
Regarding CPU time, rsync is certainly designed to trade CPU time for bandwidth consumed. It was invented when the original author was using a dial-up modem. Whether what it consumes is "immense" is somewhat subjective. When I see it working hard, it tends to use between 20% and 30% of one core. I've seen it closer to 50% at times.
In the context of FreeNAS ...
- I consider the biggest benefit of rsync to be that it can resume an interrupted transfer, where ZFS replication must start over.
- I consider the biggest benefit of ZFS replication to be that it preserves the whole filesystem structure, including nested datasets and their properties. rsync doesn't know anything about datasets.
I agree that with two FreeNAS boxes, ZFS replication is indicated, but rsync should be given its due credit.