diff --git a/apps/kafka-integration/app/src/main/java/org/onosproject/kafkaintegration/converter/HostEventConverter.java b/apps/kafka-integration/app/src/main/java/org/onosproject/kafkaintegration/converter/HostEventConverter.java
new file mode 100644
index 0000000..54d802b
--- /dev/null
+++ b/apps/kafka-integration/app/src/main/java/org/onosproject/kafkaintegration/converter/HostEventConverter.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2016-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.onosproject.kafkaintegration.converter;
+
+import com.google.protobuf.GeneratedMessageV3;
+
+import org.onlab.packet.IpAddress;
+import org.onosproject.event.Event;
+import org.onosproject.grpc.net.host.models.HostEnumsProto.HostEventTypeProto;
+import org.onosproject.grpc.net.host.models.HostEventProto.HostNotificationProto;
+import org.onosproject.grpc.net.models.HostProtoOuterClass.HostProto;
+import org.onosproject.incubator.protobuf.models.net.AnnotationsTranslator;
+import org.onosproject.incubator.protobuf.models.net.HostIdProtoTranslator;
+import org.onosproject.incubator.protobuf.models.net.HostLocationProtoTranslator;
+import org.onosproject.net.host.HostEvent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.util.stream.Collectors;
+
+/**
+ * Converts ONOS Host event message to protobuf format.
+ */
+public class HostEventConverter implements EventConverter {
+
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
+    @Override
+    public byte[] convertToProtoMessage(Event<?, ?> event) {
+
+        HostEvent hostEvent = (HostEvent) event;
+
+        if (!hostEventTypeSupported(hostEvent)) {
+            log.error("Unsupported Onos Host Event {}. There is no matching"
+                    + "proto Host Event type", hostEvent.type().toString());
+            return null;
+        }
+
+        return ((GeneratedMessageV3) buildHostProtoMessage(hostEvent)).toByteArray();
+
+    }
+
+    /**
+     * Checks if the ONOS Host Event type is supported.
+     *
+     * @param event ONOS Host event
+     * @return true if there is a match and false otherwise
+     */
+    private boolean hostEventTypeSupported(HostEvent event) {
+        HostEventTypeProto[] hostEvents = HostEventTypeProto.values();
+        for (HostEventTypeProto hostEventType : hostEvents) {
+            if (hostEventType.name().equals(event.type().name())) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    private HostNotificationProto buildHostProtoMessage(HostEvent hostEvent) {
+        HostNotificationProto.Builder notificationBuilder =
+                HostNotificationProto.newBuilder();
+
+        HostProto hostCore =
+                HostProto.newBuilder()
+                        .setHostId(HostIdProtoTranslator.translate(hostEvent
+                                .subject().id()))
+                        .setConfigured(hostEvent.subject().configured())
+                        .addAllIpAddresses(hostEvent.subject().ipAddresses()
+                                .stream().map(IpAddress::toString)
+                                .collect(Collectors.toList()))
+                        .setLocation(HostLocationProtoTranslator.translate(
+                                hostEvent.subject().location()))
+                        .setVlan(hostEvent.subject().vlan().toShort())
+                        .putAllAnnotations(AnnotationsTranslator.asMap(
+                                hostEvent.subject().annotations()))
+                        .build();
+
+        notificationBuilder.setHostEventType(getProtoType(hostEvent))
+                .setHost(hostCore);
+
+        return notificationBuilder.build();
+    }
+
+    /**
+     * Retrieves the protobuf generated host event type.
+     *
+     * @param event ONOS Host Event
+     * @return generated Host Event Type
+     */
+    private HostEventTypeProto getProtoType(HostEvent event) {
+        HostEventTypeProto protobufEventType = null;
+        HostEventTypeProto[] hostEvents = HostEventTypeProto.values();
+        for (HostEventTypeProto hostEventType : hostEvents) {
+            if (hostEventType.name().equals(event.type().name())) {
+                protobufEventType = hostEventType;
+            }
+        }
+
+        return protobufEventType;
+    }
+}
diff --git a/apps/kafka-integration/app/src/main/java/org/onosproject/kafkaintegration/impl/EventConversionManager.java b/apps/kafka-integration/app/src/main/java/org/onosproject/kafkaintegration/impl/EventConversionManager.java
index 5c90325..372b57a 100644
--- a/apps/kafka-integration/app/src/main/java/org/onosproject/kafkaintegration/impl/EventConversionManager.java
+++ b/apps/kafka-integration/app/src/main/java/org/onosproject/kafkaintegration/impl/EventConversionManager.java
@@ -22,16 +22,19 @@
 import org.onosproject.event.Event;
 import org.onosproject.kafkaintegration.api.EventConversionService;
 import org.onosproject.kafkaintegration.api.dto.OnosEvent;
-import org.onosproject.kafkaintegration.converter.DeviceEventConverter;
 import org.onosproject.kafkaintegration.converter.EventConverter;
+import org.onosproject.kafkaintegration.converter.DeviceEventConverter;
 import org.onosproject.kafkaintegration.converter.LinkEventConverter;
+import org.onosproject.kafkaintegration.converter.HostEventConverter;
 import org.onosproject.net.device.DeviceEvent;
 import org.onosproject.net.link.LinkEvent;
+import org.onosproject.net.host.HostEvent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static org.onosproject.kafkaintegration.api.dto.OnosEvent.Type.DEVICE;
 import static org.onosproject.kafkaintegration.api.dto.OnosEvent.Type.LINK;
+import static org.onosproject.kafkaintegration.api.dto.OnosEvent.Type.HOST;
 
 /**
  * Implementation of Event Conversion Service.
@@ -43,11 +46,13 @@
     private final Logger log = LoggerFactory.getLogger(getClass());
     private EventConverter deviceEventConverter;
     private EventConverter linkEventConverter;
+    private EventConverter hostEventConverter;
 
     @Activate
     protected void activate() {
         deviceEventConverter = new DeviceEventConverter();
         linkEventConverter = new LinkEventConverter();
+        hostEventConverter = new HostEventConverter();
 
         log.info("Started");
     }
@@ -63,6 +68,8 @@
             return new OnosEvent(DEVICE, deviceEventConverter.convertToProtoMessage(event));
         } else if (event instanceof LinkEvent) {
             return new OnosEvent(LINK, linkEventConverter.convertToProtoMessage(event));
+        } else if (event instanceof HostEvent) {
+            return new OnosEvent(HOST, hostEventConverter.convertToProtoMessage(event));
         } else {
             throw new IllegalArgumentException("Unsupported event type");
         }
diff --git a/apps/kafka-integration/app/src/main/java/org/onosproject/kafkaintegration/kafka/EventListener.java b/apps/kafka-integration/app/src/main/java/org/onosproject/kafkaintegration/kafka/EventListener.java
index 18baccb..91e2028 100644
--- a/apps/kafka-integration/app/src/main/java/org/onosproject/kafkaintegration/kafka/EventListener.java
+++ b/apps/kafka-integration/app/src/main/java/org/onosproject/kafkaintegration/kafka/EventListener.java
@@ -34,6 +34,9 @@
 import org.onosproject.net.link.LinkEvent;
 import org.onosproject.net.link.LinkListener;
 import org.onosproject.net.link.LinkService;
+import org.onosproject.net.host.HostEvent;
+import org.onosproject.net.host.HostListener;
+import org.onosproject.net.host.HostService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -44,6 +47,7 @@
 import static org.onlab.util.Tools.groupedThreads;
 import static org.onosproject.kafkaintegration.api.dto.OnosEvent.Type.DEVICE;
 import static org.onosproject.kafkaintegration.api.dto.OnosEvent.Type.LINK;
+import static org.onosproject.kafkaintegration.api.dto.OnosEvent.Type.HOST;
 
 
 /**
@@ -66,6 +70,9 @@
     protected LinkService linkService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
+    protected HostService hostService;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected KafkaEventStorageService kafkaStoreService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
@@ -76,6 +83,7 @@
 
     private final DeviceListener deviceListener = new InternalDeviceListener();
     private final LinkListener linkListener = new InternalLinkListener();
+    private final HostListener hostListener = new InternalHostListener();
 
     protected ExecutorService eventExecutor;
 
@@ -89,6 +97,7 @@
         eventExecutor = newSingleThreadScheduledExecutor(groupedThreads("onos/onosEvents", "events-%d", log));
         deviceService.addListener(deviceListener);
         linkService.addListener(linkListener);
+        hostService.addListener(hostListener);
 
         localNodeId = clusterService.getLocalNode().id();
 
@@ -101,6 +110,7 @@
     protected void deactivate() {
         deviceService.removeListener(deviceListener);
         linkService.removeListener(linkListener);
+        hostService.removeListener(hostListener);
 
         eventExecutor.shutdownNow();
         eventExecutor = null;
@@ -153,4 +163,27 @@
 
         }
     }
+
+    private class InternalHostListener implements HostListener {
+
+        @Override
+        public void event(HostEvent event) {
+
+            // do not allow to proceed without leadership
+            NodeId leaderNodeId = leadershipService.getLeader(PUBLISHER_TOPIC);
+            if (!Objects.equals(localNodeId, leaderNodeId)) {
+                log.debug("Not a Leader, cannot publish!");
+                return;
+            }
+
+            if (!eventSubscriptionService.getEventSubscribers(HOST).isEmpty()) {
+                OnosEvent onosEvent = eventConversionService.convertEvent(event);
+                eventExecutor.execute(() -> {
+                    kafkaStoreService.publishEvent(onosEvent);
+                });
+                log.debug("Pushed event {} to kafka storage", onosEvent);
+            }
+
+        }
+    }
 }
\ No newline at end of file
