Skip to content

adamko-dev/kafkatorio

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Mod Portal Factorio Version

Kafkatorio

Kafkatorio is a platform used for creating Factorio mods that require communication with an external server.

Development is ongoing.

At present Kafkatorio is used to create a live-view web map, that shows the current status of a Factorio server, and any connected players.

However, Kafkatorio can be used for more than this. It has the potential to export metrics, and allow for inter-server communication.

Kafkatorio was created to explore the possibilities of using Apache Kafka to process updates from a Factorio server.

Running

Instructions for running a Kafkatorio instance are available in the docs.

Overview

This is a brief overview of how Kafkatorio gathers data, processes it, and uses it to create the live web-map.

Kafkatorio receives updates from a Factorio server, processes them, and exposes them over a REST and WebSocket APIs.

  1. The Kafkatorio game mod, events-mod, collects event data, de-bouncing and grouping events, and converts them to JSON packets

  2. events-mod prints the packets to the Factorio game server logs

  3. The Factorio logs are forwarded to a Kafka cluster, either using

    • syslog (using Docker logging plugin)
    • or Kafka Pipe (a script that reads the server logs and forwards them to a Kafka topic)
  4. The packets are consumed by events-server, which processes the packets using Kafka Streams, creating and hosting map tiles.

    events-server serves the map tiles via a REST API, and produces WebSocket messages regarding updates (for example, when a player's location has changed).

  5. The web-map uses Leaflet/JS to display the map, using the tiles and WebSocket messages from events-server

sequenceDiagram

Factorio multiplayer server->>events-mod: in-game events
Note over events-mod: converts events to packets
events-mod->>logs processor: packets logged to console
logs processor->>Kafka: publishes packets<br/>(Requires API key!)

Kafka->>events-server: 

Note over events-server: Packets are processed

events-server->>web-map: Web map tiles (REST API)
events-server-)web-map: WebSocket updates<br/>(e.g. player movement)

License

Because I care about sharing improvements, Kafkatorio is licensed under the
GNU General Public License v3.0.