com.hazelcast.flakeidgen

## Interface FlakeIdGenerator

- All Superinterfaces:
    DistributedObject, IdGenerator
  All Known Implementing Classes:
    ClientFlakeIdGeneratorProxy

      public interface FlakeIdGenerator
      extends IdGenerator

  A cluster-wide unique ID generator. Generated IDs are `long` primitive values and are k-ordered (roughly ordered). IDs are in the range from `0` to `Long.MAX_VALUE`.

  The IDs contain timestamp component and a node ID component, which is assigned when the member joins the cluster. This allows the IDs to be ordered and unique without any coordination between members, which makes the generator safe even in split-brain scenario (for caveats, `see here`).

  Timestamp component is in milliseconds since 1.1.2018, 0:00 UTC and has 41 bits. This caps the useful lifespan of the generator to little less than 70 years (until ~2088). The sequence component is 6 bits. If more than 64 IDs are requested in single millisecond, IDs will gracefully overflow to the next millisecond and uniqueness is guaranteed in this case. The implementation does not allow overflowing by more than 15 seconds, if IDs are requested at higher rate, the call will block. Note, however, that clients are able to generate even faster because each call goes to a different (random) member and the 64 IDs/ms limit is for single member.

  #### Node ID overflow

  Node ID component of the ID has 16 bits. Members with member list join version higher than 2^16 won't be able to generate IDs, but functionality will be preserved by forwarding to another member. It is possible to generate IDs on any member or client as long as there is at least one member with join version smaller than 2^16 in the cluster. The remedy is to restart the cluster: nodeId will be assigned from zero again. Uniqueness after the restart will be preserved thanks to the timestamp component.
  Since:
    3.10

- - ### Method Summary

    All Methods Instance Methods Abstract Methods Deprecated Methods
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | `init(long id)` Deprecated.
    `long` | `newId()` Generates and returns a cluster-wide unique ID.

    - ### Methods inherited from interface com.hazelcast.core.DistributedObject

      `destroy, getName, getPartitionKey, getServiceName`

- - ### Method Detail

    - #### newId

          long newId()

      Generates and returns a cluster-wide unique ID.

      Operation on member is always local, if the member has valid node ID, otherwise it's remote. On client, this method goes to a random member and gets a batch of IDs, which will then be returned locally for limited time. The pre-fetch size and the validity time can be configured for each client and member, see `here` for member config and see `ClientConfig.addFlakeIdGeneratorConfig()` for client config.

      Note: Values returned from this method may be not strictly ordered.

      Specified by:
        `newId` in interface `IdGenerator`
      Returns:
        new cluster-wide unique ID
      Throws:
        `HazelcastException` - if node ID for all members in the cluster is out of valid range. See "Node ID overflow" in `class documentation` for more details.
        `UnsupportedOperationException` - if the cluster version is below 3.10

    - #### init

          @Deprecated
          boolean init(long id)

      Deprecated.
      Tries to initialize this `IdGenerator` instance with the given ID.

      The next generated ID will be 1 greater than the supplied ID.

      Note for Flake ID Generator: This method does nothing and will simply tell if the next ID will be larger than the given ID. You don't need to call this method on cluster restart - uniqueness is preserved thanks to the timestamp component of the ID.

      Specified by:
        `init` in interface `IdGenerator`
      Returns:
        `true`, if the next ID will be larger than the supplied id

Copyright © 2019. All rights reserved.