Maintain exchange rate tables

How is exchange rates maintained? e.g. I want to say 1USD = 12.43 ZAR or 1EUR = 1.08USD.?

All the currency rates are relatives. So you define which currency is the base and put a rate of 1 on it. Then you set the rate of all other currencies relative to this base currency.
This is defined in Currency Module — trytond_currency latest documentation

Thank you.

My understand then if ZAR is my base currency, I set the rate to 1

If I sell from a base currency of ZAR but 1 ZAR is 0.06728 USD then the rate of this is set on the USD currency

So what happen if I have 2 companies:

1 company in ZAR base currency
1 company in KES base currency

Both require conversion to USD? How will this be handled?

As I said the currency rates are relative. The company currency is not important. But you have to choose a base currency (and even you can use any fancy setup but it is simpler to choose one currency).