// A common struct used in DescribeQuorumResponse.
DescribeQuorumResponseTopicPartitionReplicaState => not top level, no encoding, flexible v0+
  ReplicaID: int32
  // The last known log end offset of the follower, or -1 if it is unknown.
  LogEndOffset: int64
  // The last known leader wall clock time when a follower fetched from the
  // leader, or -1 for the current leader or if unknown for a voter.
  LastFetchTimestamp: int64(-1) // v1+
  // The leader wall clock append time of the offset for which the follower
  // made the most recent fetch request, or -1 for the current leader or if
  // unknown for a voter.
  LastCaughtUpTimestamp: int64(-1) // v1+

// Part of KIP-642 (and KIP-595) to replace Kafka's dependence on Zookeeper with a
// Kafka-only raft protocol,
// DescribeQuorumRequest is sent by a leader to describe the quorum.
DescribeQuorumRequest => key 55, max version 1, flexible v0+, admin
  Topics: [=>]
    Topic: string
    Partitions: [=>]
      Partition: int32

DescribeQuorumResponse =>
  ErrorCode: int16
  Topics: [=>]
    Topic: string
    Partitions: [=>]
      Partition: int32
      ErrorCode: int16
      // The ID of the current leader, or -1 if the leader is unknown.
      LeaderID: int32
      // The latest known leader epoch.
      LeaderEpoch: int32
      HighWatermark: int64
      CurrentVoters: [DescribeQuorumResponseTopicPartitionReplicaState]
      Observers: [DescribeQuorumResponseTopicPartitionReplicaState]
