Skip to content

notify: add Kafka receiver - #5410

Open
ultinous-cshorvath wants to merge 5 commits into
prometheus:mainfrom
Ultinous:kafka_receiver
Open

notify: add Kafka receiver#5410
ultinous-cshorvath wants to merge 5 commits into
prometheus:mainfrom
Ultinous:kafka_receiver

Conversation

@ultinous-cshorvath

Copy link
Copy Markdown

Pull Request Checklist

Please check all the applicable boxes.

  • Please list all open issue(s) discussed with maintainers related to this change
  • Is this a new Receiver integration?
  • Is this a bugfix?
    • I have added tests that can reproduce the bug which pass with this bugfix applied
  • Is this a new feature?
    • I have added tests that test the new feature's functionality
  • Does this change affect performance?
    • I have provided benchmarks comparison that shows performance is improved or is not degraded
      • You can use benchstat to compare benchmarks
    • I have added new benchmarks if required or requested by maintainers
  • Is this a breaking change?
    • My changes do not break the existing cluster messages
    • My changes do not break the existing api
  • I have added/updated the required documentation
  • I have signed-off my commits
  • I will follow best practices for contributing to this project

Which user-facing changes does this PR introduce?

[FEATURE] notify: Add an Apache Kafka receiver using the webhook v4 JSON message format.

Signed-off-by: cshorvath <cshorvath@ultinous.com>
@ultinous-cshorvath
ultinous-cshorvath requested a review from a team as a code owner July 29, 2026 10:08
@ultinous-cshorvath ultinous-cshorvath changed the title Kafka receiver notify: add Kafka receiver Jul 29, 2026
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: d0790af8-2e22-468d-acbd-1bd5769354aa

📥 Commits

Reviewing files that changed from the base of the PR and between e4d99c5 and 2d28927.

📒 Files selected for processing (1)
  • docs/configuration.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/configuration.md

Included review availability: Your plan includes up to 8 reviews per rolling hour; 7 remain after this review.


📝 Walkthrough

Walkthrough

Added an Apache Kafka notification receiver that publishes webhook v4 JSON messages. Added Kafka configuration, receiver wiring, documentation, metrics registration, and tests. Added integration cleanup during construction, reload, and shutdown.

Changes

Kafka receiver

Layer / File(s) Summary
Kafka notifier and configuration
notify/kafka/*, notify/kafka/*_test.go
Adds Kafka configuration validation and publishes grouped alerts as webhook v4 JSON records.
Receiver configuration and wiring
config/..., docs/..., notify/metrics.go, CHANGELOG.md, kafka/kafka.go
Adds kafka_configs, constructs Kafka integrations, registers Kafka metrics, and documents the receiver.
Integration resource cleanup
notify/notify.go, notify/integration_close_test.go, app/reloader.go, app/reloader_test.go
Adds integration closing and joins cleanup errors during construction, reload, and shutdown.

Estimated code review effort: 4 (Complex) | ~45 minutes

Merge Risk: ⚪ Minimal · up to 2d289

This PR adds a Kafka receiver and related configuration and documentation; no actionable merge-blocking risk remains based on the supplied evidence.

Sequence Diagram(s)

sequenceDiagram
  participant Alertmanager
  participant KafkaNotifier as notify/kafka.Notifier
  participant KafkaProducer
  participant KafkaBroker
  Alertmanager->>KafkaNotifier: Notify grouped alerts
  KafkaNotifier->>KafkaNotifier: Render webhook v4 JSON
  KafkaNotifier->>KafkaProducer: ProduceSync topic, group key, JSON value
  KafkaProducer->>KafkaBroker: Publish Kafka record
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the main change: adding a Kafka receiver.
Description check ✅ Passed The description completes the checklist, documents the feature, references issue #1996, and includes release notes.
Linked Issues check ✅ Passed The changes implement Kafka notification configuration and delivery support requested by issue #1996, with tests and documentation.
Out of Scope Changes check ✅ Passed The reloader and integration lifecycle changes support safe Kafka resource management and remain related to the receiver feature.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
notify/kafka/config.go (1)

45-53: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Wrap propagated Kafka errors with operation context.

Direct error returns make YAML parsing and producer construction failures harder to locate. Wrap each propagated error with fmt.Errorf("kafka: <operation>: %w", err).

  • notify/kafka/config.go#L45-L53: wrap YAML unmarshal and client-option validation errors.
  • notify/kafka/kafka.go#L46-L55: wrap configuration validation and producer-option construction errors.

As per coding guidelines, “Wrap errors with fmt.Errorf("...: %w", err) and check with errors.Is/errors.As in Go code.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@notify/kafka/config.go` around lines 45 - 53, Wrap the propagated errors in
Config unmarshalling and validate using fmt.Errorf with “kafka: <operation>: %w”
context, covering both sites: notify/kafka/config.go lines 45-53 for YAML
unmarshal and client-option validation, and notify/kafka/kafka.go lines 46-55
for configuration validation and producer-option construction. Preserve error
unwrapping so callers can continue using errors.Is and errors.As.

Source: Coding guidelines

app/reloader.go (1)

127-130: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add receiver context to the joined error.

A receiver build failure is returned without the receiver name. Wrap err before joining it with cleanup errors.

As per coding guidelines, “Wrap errors with fmt.Errorf("...: %w", err) and check with errors.Is/errors.As in Go code.”

Proposed fix
-			return errors.Join(err, notify.CloseIntegrations(integrations))
+			return errors.Join(
+				fmt.Errorf("build receiver %q: %w", rcv.Name, err),
+				notify.CloseIntegrations(integrations),
+			)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@app/reloader.go` around lines 127 - 130, Update the receiver build error
handling around BuildReceiverIntegrations to wrap err with receiver context
using fmt.Errorf and %w before joining it with
notify.CloseIntegrations(integrations), including the receiver name in the
message while preserving errors.Is/errors.As unwrapping.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/configuration.md`:
- Around line 2039-2042: Update both occurrences of the producer acknowledgement
documentation in docs/configuration.md to remove the claim that acks: "all"
enables idempotent writes. Keep the description focused on waiting for all
in-sync replicas, while preserving the existing acknowledgement-level behavior
and syntax.

---

Nitpick comments:
In `@app/reloader.go`:
- Around line 127-130: Update the receiver build error handling around
BuildReceiverIntegrations to wrap err with receiver context using fmt.Errorf and
%w before joining it with notify.CloseIntegrations(integrations), including the
receiver name in the message while preserving errors.Is/errors.As unwrapping.

In `@notify/kafka/config.go`:
- Around line 45-53: Wrap the propagated errors in Config unmarshalling and
validate using fmt.Errorf with “kafka: <operation>: %w” context, covering both
sites: notify/kafka/config.go lines 45-53 for YAML unmarshal and client-option
validation, and notify/kafka/kafka.go lines 46-55 for configuration validation
and producer-option construction. Preserve error unwrapping so callers can
continue using errors.Is and errors.As.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 00bb60ba-8a61-44d4-9c0e-4ab3746914f7

📥 Commits

Reviewing files that changed from the base of the PR and between 75f3d55 and 9daf1f5.

📒 Files selected for processing (17)
  • CHANGELOG.md
  • app/reloader.go
  • app/reloader_test.go
  • config/config.go
  • config/config_test.go
  • config/receiver/receiver.go
  • config/receiver/receiver_test.go
  • docs/configuration.md
  • docs/integrations.md
  • kafka/kafka.go
  • notify/integration_close_test.go
  • notify/kafka/config.go
  • notify/kafka/config_test.go
  • notify/kafka/kafka.go
  • notify/kafka/kafka_test.go
  • notify/metrics.go
  • notify/notify.go

Comment thread docs/configuration.md
@siavashs siavashs self-assigned this Aug 6, 2026
@siavashs
siavashs self-requested a review August 6, 2026 20:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support for sending notification to kafka

3 participants