Skip to content
ID generator based on Twitter's Snowflake mechanism.
Branch: master
Clone or download
Pull request Compare This branch is 65 commits ahead of dvomedia:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



Build Status Scrutinizer Code Quality Code Coverage Downloads Latest Stable Version

Unique ID generator based on Twitter Snowflake, but in PHP with a simple ZeroMQ interface (rather than Thrift).

This is a rewrite of dvomedia/cruftflake. It organizes the code in modules and adds several interfaces, allowing easier extension of other server and configuration mechanisms.


The implementation copies Twitter - generating 64 bit IDs.

  • time - 41 bits
  • configured machine ID - 10 bits
  • sequence number - 12 bits

Has a custom epoch that means it can generate IDs until 2081-09-06 (not the same epoch as Snowflake).

ZooKeeper for config coordination

We use ZooKeeper to store which machine IDs are in use. When a new node starts up for the first time it must be able to contact the ZooKeeper cluster and create a new node. It will look at all the existing nodes and then (if it can't find its own Mac Address) attempt to claim a free one.

I was using Ephemeral nodes for this - similar(ish) to a lock pattern but this had the issue that the node needed to remain connected to ZK throughout its lifetime -- this way it doesn't.

The downside is that potentially the 1024 possible machine IDs will "fill up" and need to be manually pruned.


Installation via composer:

    	"require": {
	        "gendoria/cruftflake": "*"

There are several example scripts provided for playing about with. Both require previous composer update.

  1. The generator (the server)

  2. A client, that will generate N IDs and dump to STDOUT

    ./examples/client.php -n 100
  3. A client, that will ask server for generator status


For client examples to work, server example has to be be running.


  • ZeroMQ
  • ZooKeeper (if you want to use ZooKeeper centralized configuration)
  • Doctrine DBAL >= 2.3.0 (if you want Doctrine DBAL centralized configuration)

Composer requires php-zmq module installed.

You can’t perform that action at this time.