Top-Logic bietet die Möglichkeit Daten zwischen verschiedenen TL-Systemen zu synchronisieren. Hierfür werden Daten von dem Quellsystem an das externe Bus-System ​Kafka gegeben. Dieses verteilt dann die Daten an die Zielsysteme. Eine gute Einführung zu Kafka findet man in ​Kafka Tutorial. Mittels des ​Kafka Tools kann man Kafka-Instanzen untersuchen.

Der Ablauf bei der Synchronisation ist folgender:

Technische Vorraussetzung

Exportierte Informationen

Welche Informationen aus dem Quellsystem TL1 exportiert werden, wird in der Modellkonfiguration festgelegt.

Bsp.:

<model xmlns="http://www.top-logic.com/ns/dynamic-types/6.0">
  <modules>
    <module name="tl1_module">
      <types>
        <class name="tl1_type">
          <annotations>
            <exported /> <!-- Sorgt dafür das tl1_type exportiert wird -->
          </annotations>
          <attributes>
            <property name="prop1" />  <!-- Wird exportiert da tl1_type exportiert wird -->
            <property name="prop2" >
              <annotations>
                <exported value="false"/> <!-- Sorgt dafür das prop2 nicht exportiert wird -->
              </annotations>
            </property>
        ....
          </attributes>
        </class>
      </types>
    </module>
  </modules>
</model>

Importierte Informationen

Welche Informationen in das Quellsystem TL2 importiert werden, wird in der Modellkonfiguration festgelegt.

Bsp.:

<model xmlns="http://www.top-logic.com/ns/dynamic-types/6.0">
  <modules>
    <module name="tl2_module">
      <types>
        <class name="tl2_type">
          <annotations>
            <imported source="tl1_module:tl1_class" /> <!-- Objekte vom Typ "tl1_module:tl1_class" werden auf "tl2_module:tl2_class" gemappt-->
          </annotations>
          <attributes>
            <property name="prop1" />  <!-- Wird mit dem Attribut "tl1_module:tl1_class#prop1" identifiziert -->
            <property name="myFunnyProp2" >
              <annotations>
                <imported source="prop2"/> <!-- Sorgt dafür das "tl2_module:tl2_class#myFunnyProp2" mit "tl1_module:tl1_class#prop2" identifiziert -->
              </annotations>
            </property>
        ....
          </attributes>
        </class>
      </types>
    </module>
  </modules>
</model>

Nachrichten über 1 MB

In der Standardkonfiguration überträgt Kafka nur Nachrichten bis 1 MB Größe. Dieses Limit kann zum Beispiel bei Gallery-Attributen oder anderen Datei-Uploads schnell erreicht werden. Sobald in der Standardkonfiguration eine Nachricht größer 1 MB übertragen werden soll, stoppt die TL-Sync-Übertragung dauerhaft, bis das Problem behoben wurde. Es gibt zwei Wege, dies zu vermeiden:

Anpassung der Kafka-Konfiguration

Um größere Nachrichten zu übertragen, müssen folgende Konfigurationen geändert werden:

Einschränkung der maximalen Größe eines Commits

Mittels Constraints muss die maximale Datenmenge an potentiell großen Attributen beschränkt werden. Dabei ist zu beachten, dass Dateien bei der Übertragung etwa die 1,4-fache Menge an Bytes benötigen. Ein Bild das 59 MB groß war, hat eine Kafka-Message der Größe 81 MB erzeugt. Das muss man bei den Constraints entsprechend beachten.