{
  "id": "kafka-log-consumer-groups",
  "chapter": "messaging-events-and-streaming",
  "batch": "01",
  "rank": 10,
  "sourcePage": 310,
  "sourcePointer": "p. 310",
  "status": "accepted",
  "reviewerStatus": "reviewed",
  "fidelityScore": 0.9,
  "canvas": {
    "width": 960,
    "height": 640
  },
  "fireworksTechGraph": {
    "style": "style-1-flat-icon",
    "diagramType": "data-flow",
    "topologyNotes": [
      "source page render inspected",
      "extracted page text inspected",
      "semantic redraw",
      "preserve major box and arrow meaning",
      "do not copy original pixels or wording"
    ],
    "publicBoundary": [
      "original vector output",
      "short generic labels only",
      "source renders remain ignored"
    ]
  },
  "callouts": [],
  "sourceReview": {
    "conceptAnchors": [
      "concept: Stream",
      "concept: Producer",
      "concept: Consumer",
      "concept: How",
      "concept: Kafka"
    ],
    "labelSource": "source-summary",
    "semanticStatus": "reviewed"
  },
  "title": "Kafka Log and Consumer Group Flow",
  "groups": [
    {
      "id": "produce",
      "label": "Produce",
      "x": 46,
      "y": 124,
      "w": 180,
      "h": 320
    },
    {
      "id": "cluster",
      "label": "Kafka cluster",
      "x": 284,
      "y": 108,
      "w": 386,
      "h": 356
    },
    {
      "id": "consume",
      "label": "Consumer group",
      "x": 724,
      "y": 124,
      "w": 182,
      "h": 320
    }
  ],
  "shapes": [
    {
      "id": "producer",
      "kind": "rect",
      "label": "Producer",
      "detail": "events",
      "x": 78,
      "y": 174,
      "w": 112,
      "h": 62,
      "tone": "blue"
    },
    {
      "id": "serializer",
      "kind": "rect",
      "label": "Serializer",
      "detail": "bytes",
      "x": 78,
      "y": 318,
      "w": 112,
      "h": 62,
      "tone": "orange"
    },
    {
      "id": "broker1",
      "kind": "rect",
      "label": "Broker 1",
      "detail": "topic log",
      "x": 328,
      "y": 154,
      "w": 112,
      "h": 60,
      "tone": "purple"
    },
    {
      "id": "broker2",
      "kind": "rect",
      "label": "Broker 2",
      "detail": "replica",
      "x": 506,
      "y": 154,
      "w": 112,
      "h": 60,
      "tone": "purple"
    },
    {
      "id": "partition1",
      "kind": "queue",
      "label": "Partition 0",
      "detail": "ordered",
      "x": 334,
      "y": 282,
      "w": 112,
      "h": 50,
      "tone": "teal"
    },
    {
      "id": "partition2",
      "kind": "queue",
      "label": "Partition 1",
      "detail": "ordered",
      "x": 500,
      "y": 282,
      "w": 112,
      "h": 50,
      "tone": "teal"
    },
    {
      "id": "replication",
      "kind": "rect",
      "label": "Replication",
      "detail": "copies",
      "x": 418,
      "y": 382,
      "w": 112,
      "h": 56,
      "tone": "gray"
    },
    {
      "id": "c1",
      "kind": "rect",
      "label": "Consumer 1",
      "detail": "offset",
      "x": 762,
      "y": 172,
      "w": 112,
      "h": 60,
      "tone": "green"
    },
    {
      "id": "c2",
      "kind": "rect",
      "label": "Consumer 2",
      "detail": "offset",
      "x": 762,
      "y": 318,
      "w": 112,
      "h": 60,
      "tone": "green"
    }
  ],
  "connectors": [
    {
      "from": "producer",
      "to": "serializer",
      "label": "encode",
      "flow": "control"
    },
    {
      "from": "serializer",
      "to": "broker1",
      "label": "publish",
      "flow": "async"
    },
    {
      "from": "broker1",
      "to": "partition1",
      "label": "append",
      "flow": "data"
    },
    {
      "from": "broker2",
      "to": "partition2",
      "label": "append",
      "flow": "data"
    },
    {
      "from": "partition1",
      "to": "replication",
      "label": "copy",
      "flow": "data",
      "dashed": true
    },
    {
      "from": "partition2",
      "to": "replication",
      "label": "copy",
      "flow": "data",
      "dashed": true
    },
    {
      "from": "partition1",
      "to": "c1",
      "label": "consume",
      "flow": "main"
    },
    {
      "from": "partition2",
      "to": "c2",
      "label": "consume",
      "flow": "main"
    }
  ]
}
