From f4a6281fe7f4fee74b462528b53d70af5ce8e074 Mon Sep 17 00:00:00 2001 From: Jacck Date: Wed, 18 Dec 2024 01:21:48 +0100 Subject: [PATCH 1/9] Add Kafka architecture diagram generator and workflow --- .github/workflows/architecture.yml | 45 +++++++++++++++++ architecture_generator.py | 79 ++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 .github/workflows/architecture.yml create mode 100644 architecture_generator.py diff --git a/.github/workflows/architecture.yml b/.github/workflows/architecture.yml new file mode 100644 index 0000000000000..35a40ff4590e4 --- /dev/null +++ b/.github/workflows/architecture.yml @@ -0,0 +1,45 @@ +name: Generate Kafka Architecture Diagram + +on: + push: + branches: [ trunk ] + workflow_dispatch: + +permissions: + contents: write + +jobs: + generate: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: '3.10' + cache: 'pip' + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y graphviz graphviz-dev + python -m pip install --upgrade pip + pip install diagrams + + - name: Create architecture diagram + run: | + python architecture_generator.py + ls -la + + - name: Commit and push changes + run: | + git config --local user.email "github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + git add -f kafka_architecture.png + git status + git commit -m "Add Kafka architecture diagram [skip ci]" || echo "No changes to commit" + git push diff --git a/architecture_generator.py b/architecture_generator.py new file mode 100644 index 0000000000000..72743c26397d4 --- /dev/null +++ b/architecture_generator.py @@ -0,0 +1,79 @@ +from diagrams import Diagram, Cluster, Edge +from diagrams.programming.language import Java +from diagrams.programming.framework import Spring +from diagrams.onprem.queue import Kafka +from diagrams.onprem.client import Client +from diagrams.onprem.network import ZooKeeper +from diagrams.onprem.database import Cassandra +from diagrams.onprem.compute import Server + +def generate_architecture(): + """Generate architecture diagram for Apache Kafka.""" + + graph_attr = { + "fontsize": "30", + "bgcolor": "white", + "splines": "ortho", + "pad": "0.5" + } + + node_attr = { + "fontsize": "14" + } + + with Diagram( + "Apache Kafka Architecture", + show=False, + direction="TB", + graph_attr=graph_attr, + node_attr=node_attr, + filename="kafka_architecture" + ): + with Cluster("Kafka Cluster"): + brokers = [ + Server("Broker 1"), + Server("Broker 2"), + Server("Broker 3") + ] + + kafka_connect = Spring("Kafka Connect") + streams = Java("Kafka Streams") + + with Cluster("Storage & Coordination"): + zk = ZooKeeper("ZooKeeper") + storage = Cassandra("Log Storage") + + with Cluster("Clients"): + producers = [ + Client("Producer 1"), + Client("Producer 2") + ] + + consumers = [ + Client("Consumer 1"), + Client("Consumer 2") + ] + + # Connect ZooKeeper to brokers + zk >> Edge(color="red", style="dashed") >> brokers[0] + zk >> Edge(color="red", style="dashed") >> brokers[1] + zk >> Edge(color="red", style="dashed") >> brokers[2] + + # Connect brokers to storage + for broker in brokers: + broker >> Edge(color="blue") >> storage + + # Connect producers to brokers + for producer in producers: + producer >> Edge(color="green") >> brokers[0] + + # Connect consumers to brokers + for consumer in consumers: + brokers[2] >> Edge(color="purple") >> consumer + + # Connect Kafka Connect and Streams + kafka_connect >> Edge(color="orange") >> brokers[1] + streams >> Edge(color="yellow") >> brokers[1] + +if __name__ == "__main__": + generate_architecture() \ No newline at end of file From 8785c7e8d31bd2700de28b38e58bd6da48af05ba Mon Sep 17 00:00:00 2001 From: Jacck Date: Wed, 18 Dec 2024 01:24:10 +0100 Subject: [PATCH 2/9] Add Kafka architecture diagram generator and workflow From de0d718c35c774eaaef3ce311655aeb9f8cb1238 Mon Sep 17 00:00:00 2001 From: Jacck Date: Wed, 18 Dec 2024 01:27:10 +0100 Subject: [PATCH 3/9] Add Kafka architecture diagram generator and workflow From d681769f1805f60a7dd67340d26e5c3be00489f5 Mon Sep 17 00:00:00 2001 From: Jacck Date: Wed, 18 Dec 2024 01:31:00 +0100 Subject: [PATCH 4/9] Fix ZooKeeper import and improve diagram labels --- architecture_generator.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/architecture_generator.py b/architecture_generator.py index 72743c26397d4..22000ca3cc5ba 100644 --- a/architecture_generator.py +++ b/architecture_generator.py @@ -3,9 +3,9 @@ from diagrams.programming.framework import Spring from diagrams.onprem.queue import Kafka from diagrams.onprem.client import Client -from diagrams.onprem.network import ZooKeeper -from diagrams.onprem.database import Cassandra +from diagrams.generic.database import DB from diagrams.onprem.compute import Server +from diagrams.onprem.monitoring import Grafana def generate_architecture(): """Generate architecture diagram for Apache Kafka.""" @@ -31,17 +31,17 @@ def generate_architecture(): ): with Cluster("Kafka Cluster"): brokers = [ - Server("Broker 1"), - Server("Broker 2"), - Server("Broker 3") + Kafka("Broker 1"), + Kafka("Broker 2"), + Kafka("Broker 3") ] kafka_connect = Spring("Kafka Connect") streams = Java("Kafka Streams") with Cluster("Storage & Coordination"): - zk = ZooKeeper("ZooKeeper") - storage = Cassandra("Log Storage") + zk = Grafana("ZooKeeper") + storage = DB("Log Storage") with Cluster("Clients"): producers = [ @@ -55,25 +55,25 @@ def generate_architecture(): ] # Connect ZooKeeper to brokers - zk >> Edge(color="red", style="dashed") >> brokers[0] + zk >> Edge(color="red", style="dashed", label="coordination") >> brokers[0] zk >> Edge(color="red", style="dashed") >> brokers[1] zk >> Edge(color="red", style="dashed") >> brokers[2] # Connect brokers to storage for broker in brokers: - broker >> Edge(color="blue") >> storage + broker >> Edge(color="blue", label="persist") >> storage # Connect producers to brokers for producer in producers: - producer >> Edge(color="green") >> brokers[0] + producer >> Edge(color="green", label="produce") >> brokers[0] # Connect consumers to brokers for consumer in consumers: - brokers[2] >> Edge(color="purple") >> consumer + brokers[2] >> Edge(color="purple", label="consume") >> consumer # Connect Kafka Connect and Streams - kafka_connect >> Edge(color="orange") >> brokers[1] - streams >> Edge(color="yellow") >> brokers[1] + kafka_connect >> Edge(color="orange", label="connect") >> brokers[1] + streams >> Edge(color="yellow", label="process") >> brokers[1] if __name__ == "__main__": generate_architecture() \ No newline at end of file From f2232d67a20725c5ac9613ed623f690471a16f90 Mon Sep 17 00:00:00 2001 From: Jacck Date: Wed, 18 Dec 2024 13:19:16 +0100 Subject: [PATCH 5/9] Fix DB import by using Storage class instead --- architecture_generator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/architecture_generator.py b/architecture_generator.py index 22000ca3cc5ba..ca463a2a48360 100644 --- a/architecture_generator.py +++ b/architecture_generator.py @@ -3,7 +3,7 @@ from diagrams.programming.framework import Spring from diagrams.onprem.queue import Kafka from diagrams.onprem.client import Client -from diagrams.generic.database import DB +from diagrams.generic.storage import Storage from diagrams.onprem.compute import Server from diagrams.onprem.monitoring import Grafana @@ -41,7 +41,7 @@ def generate_architecture(): with Cluster("Storage & Coordination"): zk = Grafana("ZooKeeper") - storage = DB("Log Storage") + storage = Storage("Log Storage") with Cluster("Clients"): producers = [ From 50bcdc5bff67df63b77c105b59a251592e59e453 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 18 Dec 2024 12:26:01 +0000 Subject: [PATCH 6/9] Add Kafka architecture diagram [skip ci] --- kafka_architecture.png | Bin 0 -> 107809 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 kafka_architecture.png diff --git a/kafka_architecture.png b/kafka_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..643e3afd0f1d3985277c4d15638a80ce7f792e90 GIT binary patch literal 107809 zcmeFZbzGDG_czX4R1^sdX%Ok|E>Y=j$%%A~4#`<`x8wvI4I@X4F%{`Z6*>5X2t@AjhvO>F#ai&Wu+ zum7q1=jf3?pF*CjYLvnad3pXP4hRiMJxuG*^dQ0@!2bY?|9jk(%FlRL{`W87{_WY5&EGQqdt9ge z?)>+6JiMm^4FCJ&|0)46i2qf>f0W>Mv+?a%2evLLD;2&ub&V{!Uf;lg0p8DwLExKF z0WTRSrO9Wv4b$bb+fEzVGyC7vB<+?fSZ{fLHZki zR{bp+@UECKM9cP2m3yyQ%`<%&v>&a&(|GMtt=}-?kdT~Kw3Q)J8uH&T73o4CBAW3o_$+#7=^yP;}W)U{%WeSWjUQ|w66c_T$#BJhN-_hd28VO+FSbsX9+qb_P1 z7_1Tzxh{O1DkwADP!K)x31V92X6Zc8M=L3WOBMfpinY`1pmo{Y@@tMZ3XI< zs{rzeE=TSOWO>cIrN3!^S*8kNR5nJvZqT5YQQH_V0}nMwJJ%U-nH29;?Xd*%0D@g( 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 Date: Wed, 18 Dec 2024 13:40:20 +0100 Subject: [PATCH 7/9] Improve diagram layout and spacing --- architecture_generator.py | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/architecture_generator.py b/architecture_generator.py index ca463a2a48360..f7d71160ab910 100644 --- a/architecture_generator.py +++ b/architecture_generator.py @@ -11,22 +11,29 @@ def generate_architecture(): """Generate architecture diagram for Apache Kafka.""" graph_attr = { - "fontsize": "30", + "fontsize": "45", "bgcolor": "white", "splines": "ortho", - "pad": "0.5" + "pad": "2.0", + "ranksep": "1.5", + "nodesep": "1.0" } node_attr = { "fontsize": "14" } + edge_attr = { + "fontsize": "12" + } + with Diagram( "Apache Kafka Architecture", show=False, - direction="TB", + direction="LR", # Changed to left-to-right graph_attr=graph_attr, node_attr=node_attr, + edge_attr=edge_attr, filename="kafka_architecture" ): with Cluster("Kafka Cluster"): @@ -54,26 +61,26 @@ def generate_architecture(): Client("Consumer 2") ] - # Connect ZooKeeper to brokers - zk >> Edge(color="red", style="dashed", label="coordination") >> brokers[0] - zk >> Edge(color="red", style="dashed") >> brokers[1] - zk >> Edge(color="red", style="dashed") >> brokers[2] + # Connect ZooKeeper to brokers with better spacing + zk >> Edge(color="red", style="dashed", minlen="2", label="coordination") >> brokers[0] + zk >> Edge(color="red", style="dashed", minlen="2") >> brokers[1] + zk >> Edge(color="red", style="dashed", minlen="2") >> brokers[2] - # Connect brokers to storage + # Connect brokers to storage with better spacing for broker in brokers: - broker >> Edge(color="blue", label="persist") >> storage + broker >> Edge(color="blue", minlen="2", label="persist") >> storage - # Connect producers to brokers + # Connect producers to brokers with better spacing for producer in producers: - producer >> Edge(color="green", label="produce") >> brokers[0] + producer >> Edge(color="green", minlen="2", label="produce") >> brokers[0] - # Connect consumers to brokers + # Connect consumers to brokers with better spacing for consumer in consumers: - brokers[2] >> Edge(color="purple", label="consume") >> consumer + brokers[2] >> Edge(color="purple", minlen="2", label="consume") >> consumer - # Connect Kafka Connect and Streams - kafka_connect >> Edge(color="orange", label="connect") >> brokers[1] - streams >> Edge(color="yellow", label="process") >> brokers[1] + # Connect Kafka Connect and Streams with better spacing + kafka_connect >> Edge(color="orange", minlen="2", label="connect") >> brokers[1] + streams >> Edge(color="yellow", minlen="2", label="process") >> brokers[1] if __name__ == "__main__": generate_architecture() \ No newline at end of file From 82ee77c316ff0fbf754810730d96669a42fc5de1 Mon Sep 17 00:00:00 2001 From: Jacck Date: Wed, 18 Dec 2024 13:40:30 +0100 Subject: [PATCH 8/9] Fix workflow git push issues and improve checkout --- .github/workflows/architecture.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/architecture.yml b/.github/workflows/architecture.yml index 35a40ff4590e4..cff627c9f49ed 100644 --- a/.github/workflows/architecture.yml +++ b/.github/workflows/architecture.yml @@ -16,6 +16,7 @@ jobs: uses: actions/checkout@v3 with: fetch-depth: 0 + ref: trunk - name: Set up Python uses: actions/setup-python@v3 @@ -35,11 +36,14 @@ jobs: python architecture_generator.py ls -la - - name: Commit and push changes + - name: Configure Git run: | git config --local user.email "github-actions[bot]@users.noreply.github.com" git config --local user.name "github-actions[bot]" + + - name: Commit and push changes + run: | + git pull --rebase origin trunk git add -f kafka_architecture.png - git status git commit -m "Add Kafka architecture diagram [skip ci]" || echo "No changes to commit" git push From c26197997bb087b5764ffb5b16c1dea6a6a3641c Mon Sep 17 00:00:00 2001 From: Jacek Wojcieszynski Date: Tue, 31 Dec 2024 01:21:48 +0100 Subject: [PATCH 9/9] Add GitHub Action for architecture analysis --- .github/scripts/analyze_architecture.py | 109 ++++++++++++++++++++ .github/workflows/architecture-analysis.yml | 36 +++++++ 2 files changed, 145 insertions(+) create mode 100644 .github/scripts/analyze_architecture.py create mode 100644 .github/workflows/architecture-analysis.yml diff --git a/.github/scripts/analyze_architecture.py b/.github/scripts/analyze_architecture.py new file mode 100644 index 0000000000000..a717ee8ac627a --- /dev/null +++ b/.github/scripts/analyze_architecture.py @@ -0,0 +1,109 @@ +import os +import re +from collections import defaultdict +import networkx as nx +import matplotlib.pyplot as plt + +class KafkaArchitectureAnalyzer: + def __init__(self): + self.dependency_graph = nx.DiGraph() + self.package_dependencies = defaultdict(set) + self.violations = [] + + def analyze_java_file(self, file_path): + with open(file_path, 'r', encoding='utf-8') as f: + content = f.read() + + # Extract package name + package_match = re.search(r'package\s+([\w.]+);', content) + if not package_match: + return + + current_package = package_match.group(1) + + # Extract imports + imports = re.findall(r'import\s+([\w.]+\*?);', content) + + # Add dependencies to graph + for imp in imports: + if imp.startswith('org.apache.kafka'): + base_package = '.'.join(imp.split('.')[:4]) # Get main package + if base_package != current_package: + self.package_dependencies[current_package].add(base_package) + self.dependency_graph.add_edge(current_package, base_package) + + # Check for architectural violations + self.check_violations(current_package, base_package) + + def check_violations(self, source, target): + # Define architectural rules + client_packages = ['org.apache.kafka.clients'] + server_packages = ['org.apache.kafka.server'] + common_packages = ['org.apache.kafka.common'] + + # Rule 1: Clients should not depend on server internals + if any(source.startswith(p) for p in client_packages): + if any(target.startswith(p) for p in server_packages): + self.violations.append(f"Violation: Client package {source} should not depend on server package {target}") + + # Rule 2: Server can depend on common + # Rule 3: Everyone can depend on common + # These are allowed, so no checks needed + + def analyze_directory(self, root_dir): + for dirpath, _, filenames in os.walk(root_dir): + for filename in filenames: + if filename.endswith('.java'): + file_path = os.path.join(dirpath, filename) + self.analyze_java_file(file_path) + + def generate_report(self): + # Create report + report = ["=== Kafka Architecture Analysis Report ===\n"] + + # Add dependency statistics + report.append("\n=== Package Dependencies ===") + for pkg, deps in self.package_dependencies.items(): + report.append(f"\n{pkg} depends on:") + for dep in deps: + report.append(f" - {dep}") + + # Add violations + if self.violations: + report.append("\n=== Architectural Violations ===") + for violation in self.violations: + report.append(violation) + else: + report.append("\n=== No Architectural Violations Found ===") + + # Save report + with open('architecture_report.txt', 'w') as f: + f.write('\n'.join(report)) + + # Generate visualization + plt.figure(figsize=(15, 15)) + pos = nx.spring_layout(self.dependency_graph) + nx.draw(self.dependency_graph, pos, with_labels=True, node_color='lightblue', + node_size=2000, font_size=8, font_weight='bold', arrows=True) + plt.savefig('dependency_graph.png') + plt.close() + +def main(): + analyzer = KafkaArchitectureAnalyzer() + + # Analyze main Kafka directories + kafka_dirs = [ + 'core/src/main/java', + 'clients/src/main/java', + 'connect/src/main/java', + 'streams/src/main/java' + ] + + for directory in kafka_dirs: + if os.path.exists(directory): + analyzer.analyze_directory(directory) + + analyzer.generate_report() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/.github/workflows/architecture-analysis.yml b/.github/workflows/architecture-analysis.yml new file mode 100644 index 0000000000000..0e28b5aa110bb --- /dev/null +++ b/.github/workflows/architecture-analysis.yml @@ -0,0 +1,36 @@ +name: Kafka Architecture Analysis + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + analyze: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install networkx pydot matplotlib + + - name: Analyze Architecture + run: | + python .github/scripts/analyze_architecture.py + + - name: Upload Analysis Results + uses: actions/upload-artifact@v3 + with: + name: architecture-analysis + path: | + architecture_report.txt + dependency_graph.png \ No newline at end of file