When you put a deposit down on a cabin, you are making it unavailable for Carnival to sell it to anyone else, sometimes for a year or more. If you cancel, Carnival has a much shorter time to resell it, and often, at a lower price than what you agreed to. A small cancelation fee sounds reasonable to me.
If Carnival canceled your cruise, you would expect some compensation. Why shouldn't it work both ways?