Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Here’s a list of proposed metrics for this new protocol:

NAME

TAGS

TYPE

NOTE

CurrentLeader

type=raft-manager

dynamic gauge

-1 means UNKNOWN

CurrentEpoch

type=raft-manager

dynamic gauge

0 means UNKNOWN

CurrentVote

type=raft-manager

dynamic gauge

-1 means not voted for anyone

LogEndOffset

type=raft-manager

dynamic gauge


LogEndEpoch

type=raft-manager

dynamic gauge


BootTimestamp

type=raft-manager

dynamic gauge


State

type=raft-manager

dynamic enum

possible values: "leader", "follower", "candidate", "observer"

NumQuorumVoters

type=raft-manager

dynamic gauge

number of cached voter connections; would never be larger than quorum-size

ElectionLatencyMax/Avg

type=raft-manager

dynamic gauge

measured on each voter, start when becoming a candidate and end on learned or become the new leader

ReplicationLatencyMax/Avg

type=raft-manager

dynamic gauge

measured on leader, start when appending the record and end on hwm advanced beyond

InboundRequestPerSec

type=raft-manager, source-broker-id=[broker-id]

windowed rate

one per source

OutboundRequestPerSec

type=raft-manager, destination-broker-id=[broker-id]

windowed rate

one per destination

InboundChannelSize

type=raft-manager

windowed average


OutboundChannelSize

type=raft-manager

windowed average


FetchRecordsPerSec

type=raft-manager

windowed rate

apply to follower and observer only

AppendRecordsPerSec

type=raft-manager

windowed rate

apply to leader only

ErrorResponsePerSec

type=raft-manager, destination-broker-id=[broker-id]

windowed rate

one per destination

TotalTimeMs

type=raft-manager, request=[request-type]

windowed average

one per inbound request type

InboundQueueTimeMs

type=raft-manager, request=[request-type]

windowed average

one per inbound request type

HandleTimeMs

type=raft-manager, request=[request-type]

windowed average

one per inbound request type

OutboundQueueTimeMs

type=raft-manager, request=[request-type]

windowed average

one per inbound request type

AvgIdlePercent

type=raft-manager

windowed average



Client Interactions

Since this specific quorum implementation is only to be used by Kafka internally, we do not need to add new public protocols for clients. More specifically, the leader of the quorum would act as the controller of the cluster, and any client requests that requires updating the metadata (previously stored in ZK) would be interpreted as appending new record(s) to the quorum's internal log.

...