Introductie
Kafka is de standaard message broker bij Railnova voor server-to-server datastromen en Railnova biedt een Generieke Kafka Streaming API aan alle Enterprise klanten onder de volgende voorwaarden.
Waarom Kafka?
In vergelijking met de meeste andere berichtensystemen, zoals AMQP en MQTT, heeft Kafka een betere doorvoer, ingebouwde partitionering, replicatie en fouttolerantie, waardoor het een goede oplossing is voor grootschalige, zeer beschikbare berichtverwerkingstoepassingen. We hebben in het verleden prestatieproblemen ondervonden met zowel MQTT als AMQP (in een server-naar-server omgeving) en een gebrek aan redundantie met single-node MQTT en AMQP architecturen.
Een ander belangrijk kenmerk van Kafka is dat het berichtenretentie biedt, waardoor de consument het bericht on-demand kan ophalen (binnen de retentieperiode) en ook specifieke berichten meerdere keren kan ophalen, in het geval van een systeemstoring of voor replay-doeleinden.
Kafka is een open-source protocol en is niet afhankelijk van een specifieke cloudleverancier. Kafka-berichten kunnen heel eenvoudig worden geconsumeerd vanuit Azure Event Hubs, AWS Kinesis of GCP dataflow. Je kunt een Kafka-service ook rechtstreeks hosten in je cloudomgeving Confluent of serviceprovider Aiven. Je kunt de Kafka-documentatie hier bekijken en de Kafka-clients in je favoriete programmeertaal hier.
Prijzen van de Generieke Kafka Streaming API
De prijs van de Generieke Kafka Streaming API service is afhankelijk van het datavolume en de gebruikte serverbronnen. Neem daarom contact op met ons Sales team voor een offerte voor de Generieke Kafka Streaming API voor de gegevens over je vloot.
Als je andere servicevoorwaarden wenst dan de generieke voorwaarden, bieden we ook aangepaste API's met aangepaste SLA's en integratieplannen, afhankelijk van een specifieke commerciële overeenkomst. Neem contact op met ons Sales team voor eventuele vragen met betrekking tot aangepaste API's.
Brokerinformatie en verbinding
Onze Kafka broker is toegankelijk voor alle Railnova Enterprise klanten vanaf het openbare internet en authenticatie vindt plaats met behulp van het SASL protocol. Wij bieden een testomgeving naast de productieomgeving. De host en het wachtwoord worden op verzoek verstrekt. Neem contact op met support@railnova.eu om meer informatie te krijgen.
| Testomgeving | Productie omgeving |
Broker host | Wordt apart verzonden | Wordt apart verzonden |
Gebruiker (voor SASL) | Naam van je bedrijf | Naam van je bedrijf |
Wachtwoord (for SASL) | Wordt apart verzonden | Wordt apart verzonden |
Schema register host | Wordt apart verzonden | Wordt apart verzonden |
Authentificatieprotocol | SASL SCRAM of SASL Plain | SASL SCRAM of SASL Plain |
Onderwerpnaam | output-sharing-gebruikersnaam | output-sharing-gebruikersnaam |
Onderwerpbehoud op de generieke Kafka-service | Standaard 24 uur | Standaard 24 uur |
CA-certificaat (nodig voor SASL-verificatie) wordt ook apart verzonden.
De gegevens zullen beschikbaar zijn in een enkele topic, gepartitioneerd per assetnummer (locomotief of treinstel). De gegevens moeten worden geconsumeerd door één enkele verbruikersgroep op dat moment.
Berichtformaat en schema
De schema's kunnen direct worden opgehaald uit ons schemaregister met dezelfde gebruiker en hetzelfde wachtwoord als voor de broker of kunnen op verzoek worden verzonden.
Berichten worden gecodeerd met Avro en gecomprimeerd met zstd.
compression.codec | zstd |
Avro schema namespace | eu.railnova.supernova.analyst |
Avro key schema naam | AnalystKey |
Avro value schema naam | AnalystValue |
Berichtenenvelop
De envelop van het bericht wordt gedefinieerd door het schema AnalystValue en hier zijn de top-level sleutelnaam en beschrijving.
Sleutel naam | Sleutel type | Omschrijving |
type | string | Type bericht (telematica, foutcode, …) |
timestamp | string | ISO 8601 gecodeerde datum-tijd in UTC/Zulu tijdzone |
asset | integer | Asset ID in Railnova |
asset_uic | string | UIC van de asset, zoals gedefinieerd in het admin menu van Railnova. |
device | integer | Toestel-ID in Railnova (kan nul zijn als de gegevens niet afkomstig zijn van een Railster) |
is_open | bool | Gebruikt voor de status van foutcodes en alerts |
content | string | De payload van het bericht. In het interne Railnova-formaat. Het is gecodeerd in JSON. Het wordt hieronder beschreven. |
De asset en asset_uic mapping naar de asset naam en aanvullende gegevens kunnen via onze API gevonden worden op het asset endpoint.
De payload van de inhoud
De inhoud van de sleutel bevat een JSON gecodeerd object dat de payload van het bericht is, specifiek voor elk berichttype.
Deze inhoud van de payload binnen een inhoudsveld kan in de toekomst veranderen, omdat het afhankelijk is van de inkomende gegevens van configureerbare IoT-apparaten zoals de Railster of gegevens van derden. Onder deze Generic Kafka Streaming API wordt geen garantie gegeven voor de schemacontinuïteit van de payload van de inhoud.
De payload van de inhoud kan worden verkend via de pagina "Telematics data" op https://one.railnova.eu/telematics/#/.
Als voorbeeld is hier wat je typisch kunt verwachten van een bericht van het type "positie" voor de inhoud.
{
"gps_time": "2020-06-15 00:00:07",
"fix": 1,
"longitude": 5021011,
"course": 310,
"location": "Bièvre",
"period_km": 1.165,
"latitude": 49946116,
"speed": 101
}
Hier is nog een voorbeeld van een bericht van de Railster embedded rule engine:
{
"ZSG_Catenary_Voltage": 1.6,
"ZSG_IW_HB_Druck": 8.6,
"ZSG_IW_HLDruck": 4.92,
"ZSG_IW_IFahrSumme_scaled_A": 21.90234375,
"ZSG_IW_IFahrdr_1_scaled_A": 0,
"ZSG_IW_IFahrdr_scaled_A": 22.90234375,
"ZSG_IW_Weg": 31019,
"ZSG_IW_ZBK_Gesamt": 0,
"ZSG_IW_ZBK_eigene_Lok": 0,
"ZSG_IW_Zugnummer": 953,
… a hundred more symbols
}
Hier is nog een voorbeeld van een alert van de Railster embedded rule engine:
{
"name": "Tueren auf Seite Rechts wurden Freigegeben bei Befehl Freigabe links",
}
Depreciatie beleid onder de Generieke Kafka Streaming API
Onder deze Railfleet - Algemeen HTTP REST API voorwaarden, willen we ervoor zorgen dat onze klanten geïnformeerd worden en de tijd hebben om hun systemen te updaten voor ingrijpende veranderingen plaatsvinden, terwijl de normale functie- en productontwikkeling workflows bij Railnova mogelijk blijven.
Een functierelease kan bepaalde functies uit eerdere releases vervangen ("een ingrijpende wijziging"). Wanneer we ingrijpende wijzigingen uitbrengen, informeren we je vóór de releasedatum over de ingrijpende wijzigingen en garanderen we dat de wijzigingen zes maanden lang terug compatibel zijn (als je binnen twee weken reageert).
Wijzigingen die als "breaking" worden beschouwd onder de generieke Kafka API zijn:
het wijzigen of verwijderen van bestaande velden van de envelopstructuur (AnalystValue schema),
verwijderen van een reeds bestaand message_type
Code voorbeeld
We bieden een open-sourced codevoorbeeld in python waarmee je je eerste bericht op onze Kafka kunt ophalen na het volgen van de README.md op GitHub.
Support
Heb je nog vragen? Ga naar het Railnova-platform en klik op "Contact" voor hulp.