Confused about distributed engine deployments

When configuring Appian engines distributed across multiple servers, I understand that the topology file tells the servers where other servers are located. What I don't understand is, how does the server itself know which functions it is fulfilling and which ports to open?

For example, let's say for the sake of this post that we have one server for the "forums" engine and all other engines are on a second server. We could model it like this in appian-topology.xml:

<topology>
  <server host="machine1" port="8000">
    <engine name="forums"/>
  </server>
  <server host="machine2" port="5000">
    <!-- Ports will be allocated consecutively -->
    <engine name="notify" />
    <engine name="notify-email" />
    <engine name="channels" />
    <!-- ... -->
  </server>
  <!-- kafka, search etc -->
</topology>

This makes sense, but now suppose machine1 is starting up and runs "k" as usual. How does it then know that it is responsible for "forums" and should listen on port 8000, rather than listening on ports 5000,5001,... for the other engines?

Is this done by looking up own hostname and/or IP address? Does this mean the hostname specified in topology needs to exactly match "/etc/hostname"?

  Discussion posts and replies are publicly visible