diff --git a/src/main/java/org/opencord/kafka/integrations/DhcpL2RelayKafkaIntegration.java b/src/main/java/org/opencord/kafka/integrations/DhcpL2RelayKafkaIntegration.java
new file mode 100644
index 0000000..786be87
--- /dev/null
+++ b/src/main/java/org/opencord/kafka/integrations/DhcpL2RelayKafkaIntegration.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opencord.kafka.integrations;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.opencord.dhcpl2relay.DhcpAllocationInfo;
+import org.opencord.dhcpl2relay.DhcpL2RelayEvent;
+import org.opencord.dhcpl2relay.DhcpL2RelayListener;
+import org.opencord.dhcpl2relay.DhcpL2RelayService;
+import org.opencord.kafka.EventBusService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.time.Instant;
+
+/**
+ * Listens for DHCP L2 relay events and pushes them on a Kafka bus.
+ */
+@Component(immediate = true)
+public class DhcpL2RelayKafkaIntegration {
+
+    public Logger log = LoggerFactory.getLogger(getClass());
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected EventBusService eventBusService;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected DhcpL2RelayService authenticationService;
+
+    private final DhcpL2RelayListener listener = new InternalDhcpL2RelayListener();
+
+    private static final String TOPIC = "dhcp.events";
+
+    private static final String TIMESTAMP = "timestamp";
+    private static final String DEVICE_ID = "deviceId";
+    private static final String TYPE = "type";
+    private static final String MESSAGE_TYPE = "messageType";
+    private static final String PORT_NUMBER = "portNumber";
+    private static final String MAC_ADDRESS = "macAddress";
+    private static final String IP_ADDRESS = "ipAddress";
+
+    @Activate
+    public void activate() {
+        authenticationService.addListener(listener);
+        log.info("Started");
+    }
+
+    @Deactivate
+    public void deactivate() {
+        authenticationService.removeListener(listener);
+        log.info("Stopped");
+    }
+
+    private void handle(DhcpL2RelayEvent event) {
+        eventBusService.send(TOPIC, serialize(event));
+    }
+
+    private JsonNode serialize(DhcpL2RelayEvent event) {
+        ObjectMapper mapper = new ObjectMapper();
+        ObjectNode dhcpEvent = mapper.createObjectNode();
+        DhcpAllocationInfo allocationInfo = event.subject();
+        dhcpEvent.put(TYPE, event.type().toString());
+        dhcpEvent.put(TIMESTAMP, Instant.now().toString());
+        dhcpEvent.put(DEVICE_ID, event.connectPoint().deviceId().toString());
+        dhcpEvent.put(MESSAGE_TYPE, allocationInfo.type().toString());
+        dhcpEvent.put(PORT_NUMBER, event.connectPoint().port().toString());
+        dhcpEvent.put(MAC_ADDRESS, allocationInfo.macAddress().toString());
+        dhcpEvent.put(IP_ADDRESS, allocationInfo.ipAddress().toString());
+        return dhcpEvent;
+    }
+
+    private class InternalDhcpL2RelayListener implements
+            DhcpL2RelayListener {
+
+        @Override
+        public void event(DhcpL2RelayEvent dhcpL2RelayEvent) {
+            handle(dhcpL2RelayEvent);
+        }
+    }
+}
