Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Microsoft is giving away 50,000 FREE Microsoft Certification exam vouchers. Get Fabric certified for FREE! Learn more

Reply
MMacarie
Frequent Visitor

How does the IoT Hub work?

I am currently using Fabric for work and I am trying to find ways to have continuous ingestion of data from an IoT Hub. I tried using an Eventstream with the IoT Hub as the source, but then I found out about the event hub compatible end point and I investingated that too. I noticed a difference in the telemetry that I got in both cases and I'm wondering what is happening behind. For the case using the event hub endpoint, besides the telemetry I sent, I see some data related to the event processing times and when I used as the source the IoT Hub I noticed, besides the data I sent from the device as well as the fields from the event hub endpoint, an IoTHub structure which also contains a time field. So for the second case I see an EventEnqueuedUtcTime as well as an EnqueuedTime. They have a slight difference between eachother and I found out it is because the message goes through the ingestion pipeline, but having both time fields, does it mean the data from the device is stored in two places? When I use the event hub enpoint, do I have an Event Hub linked to my IoT Hub with two storage locations or is it just one storage? I am asking this primarely because I wanna know what would be the difference in costs between these two methods and what is actually stored behind? Does something change in the background when I use the event hub endpoint, or do I just pull only a part of the data with it as the source in the Eventstream? Why is there the option to access the IoT Hub as well as the built-in event hub compatible endpoint associated with my IoT Hub?

1 ACCEPTED SOLUTION
Murtaza_Ghafoor
Advocate I
Advocate I

    • There is only one storage location for messages, within IoT Hub’s event retention.
    • The Event Hub-compatible endpoint does not create a separate Event Hub; it is just an alternate access point to IoT Hub’s event store.
  1. Time Fields Difference

    • EnqueuedTime (from IoTHub structure) represents when the message was received by IoT Hub.
    • EventEnqueuedUtcTime represents when the message was made available for consumers via Event Hub.
    • The slight difference between them is due to IoT Hub’s internal processing and routing delays.
  2. Cost Differences

    • IoT Hub as Source: Higher cost due to IoT-specific metadata and additional processing.
    • Event Hub-Compatible Endpoint: Lower cost as it only provides telemetry and event timestamps, skipping extra IoT Hub metadata.
  3. Background Differences

    • IoT Hub Source: Provides full telemetry + metadata like device identity and connection details.
    • Event Hub-Compatible Endpoint: Provides only telemetry and basic event timestamps, reducing overhead.
  4. Why Both Options?

    • IoT Hub Source: Use when you need rich IoT metadata (device-specific details, routing, etc.).
    • Event Hub-Compatible Endpoint: Use when you need only telemetry with lower overhead and cost.
 

View solution in original post

1 REPLY 1
Murtaza_Ghafoor
Advocate I
Advocate I

    • There is only one storage location for messages, within IoT Hub’s event retention.
    • The Event Hub-compatible endpoint does not create a separate Event Hub; it is just an alternate access point to IoT Hub’s event store.
  1. Time Fields Difference

    • EnqueuedTime (from IoTHub structure) represents when the message was received by IoT Hub.
    • EventEnqueuedUtcTime represents when the message was made available for consumers via Event Hub.
    • The slight difference between them is due to IoT Hub’s internal processing and routing delays.
  2. Cost Differences

    • IoT Hub as Source: Higher cost due to IoT-specific metadata and additional processing.
    • Event Hub-Compatible Endpoint: Lower cost as it only provides telemetry and event timestamps, skipping extra IoT Hub metadata.
  3. Background Differences

    • IoT Hub Source: Provides full telemetry + metadata like device identity and connection details.
    • Event Hub-Compatible Endpoint: Provides only telemetry and basic event timestamps, reducing overhead.
  4. Why Both Options?

    • IoT Hub Source: Use when you need rich IoT metadata (device-specific details, routing, etc.).
    • Event Hub-Compatible Endpoint: Use when you need only telemetry with lower overhead and cost.
 

Helpful resources

Announcements
MarchFBCvideo - carousel

Fabric Monthly Update - March 2025

Check out the March 2025 Fabric update to learn about new features.

March2025 Carousel

Fabric Community Update - March 2025

Find out what's new and trending in the Fabric community.

"); $(".slidesjs-pagination" ).prependTo(".pagination_sec"); $(".slidesjs-pagination" ).append("
"); $(".slidesjs-play.slidesjs-navigation").appendTo(".playpause_sec"); $(".slidesjs-stop.slidesjs-navigation").appendTo(".playpause_sec"); $(".slidesjs-pagination" ).append(""); $(".slidesjs-pagination" ).append(""); } catch(e){ } /* End: This code is added by iTalent as part of iTrack COMPL-455 */ $(".slidesjs-previous.slidesjs-navigation").attr('tabindex', '0'); $(".slidesjs-next.slidesjs-navigation").attr('tabindex', '0'); /* start: This code is added by iTalent as part of iTrack 1859082 */ $('.slidesjs-play.slidesjs-navigation').attr('id','playtitle'); $('.slidesjs-stop.slidesjs-navigation').attr('id','stoptitle'); $('.slidesjs-play.slidesjs-navigation').attr('role','tab'); $('.slidesjs-stop.slidesjs-navigation').attr('role','tab'); $('.slidesjs-play.slidesjs-navigation').attr('aria-describedby','tip1'); $('.slidesjs-stop.slidesjs-navigation').attr('aria-describedby','tip2'); /* End: This code is added by iTalent as part of iTrack 1859082 */ }); $(document).ready(function() { if($("#slides .item").length < 2 ) { /* Fixing Single Slide click issue (commented following code)*/ // $(".item").css("left","0px"); $(".item.slidesjs-slide").attr('style', 'left:0px !important'); $(".slidesjs-stop.slidesjs-navigation").trigger('click'); $(".slidesjs-previous").css("display", "none"); $(".slidesjs-next").css("display", "none"); } var items_length = $(".item.slidesjs-slide").length; $(".slidesjs-pagination-item > button").attr("aria-setsize",items_length); $(".slidesjs-next, .slidesjs-pagination-item button").attr("tabindex","-1"); $(".slidesjs-pagination-item button").attr("role", "tab"); $(".slidesjs-previous").attr("tabindex","-1"); $(".slidesjs-next").attr("aria-hidden","true"); $(".slidesjs-previous").attr("aria-hidden","true"); $(".slidesjs-next").attr("aria-label","Next"); $(".slidesjs-previous").attr("aria-label","Previous"); //$(".slidesjs-stop.slidesjs-navigation").attr("role","button"); //$(".slidesjs-play.slidesjs-navigation").attr("role","button"); $(".slidesjs-pagination").attr("role","tablist").attr("aria-busy","true"); $("li.slidesjs-pagination-item").attr("role","list"); $(".item.slidesjs-slide").attr("tabindex","-1"); $(".item.slidesjs-slide").attr("aria-label","item"); /*$(".slidesjs-stop.slidesjs-navigation").on('click', function() { var itemNumber = parseInt($('.slidesjs-pagination-item > a.active').attr('data-slidesjs-item')); $($('.item.slidesjs-slide')[itemNumber]).find('.c-call-to-action').attr('tabindex', '0'); });*/ $(".slidesjs-stop.slidesjs-navigation, .slidesjs-pagination-item > button").on('click keydown', function() { $.each($('.item.slidesjs-slide'),function(i,el){ $(el).find('.c-call-to-action').attr('tabindex', '-1'); }); var itemNumber = parseInt($('.slidesjs-pagination-item > button.active').attr('data-slidesjs-item')); $($('.item.slidesjs-slide')[itemNumber]).find('.c-call-to-action').attr('tabindex', '0'); }); $(".slidesjs-play.slidesjs-navigation").on('click', function() { $.each($('.item.slidesjs-slide'),function(i,el){ $(el).find('.c-call-to-action').attr('tabindex', '-1'); }); }); $(".slidesjs-pagination-item button").keyup(function(e){ var keyCode = e.keyCode || e.which; if (keyCode == 9) { e.preventDefault(); $(".slidesjs-stop.slidesjs-navigation").trigger('click').blur(); $("button.active").focus(); } }); $(".slidesjs-play").on("click",function (event) { if (event.handleObj.type === "click") { $(".slidesjs-stop").focus(); } else if(event.handleObj.type === "keydown"){ if (event.which === 13 && $(event.target).hasClass("slidesjs-play")) { $(".slidesjs-stop").focus(); } } }); $(".slidesjs-stop").on("click",function (event) { if (event.handleObj.type === "click") { $(".slidesjs-play").focus(); } else if(event.handleObj.type === "keydown"){ if (event.which === 13 && $(event.target).hasClass("slidesjs-stop")) { $(".slidesjs-play").focus(); } } }); $(".slidesjs-pagination-item").keydown(function(e){ switch (e.which){ case 37: //left arrow key $(".slidesjs-previous.slidesjs-navigation").trigger('click'); e.preventDefault(); break; case 39: //right arrow key $(".slidesjs-next.slidesjs-navigation").trigger('click'); e.preventDefault(); break; default: return; } $(".slidesjs-pagination-item button.active").focus(); }); }); // Start This code is added by iTalent as part of iTrack 1859082 $(document).ready(function(){ $("#tip1").attr("aria-hidden","true").addClass("hidden"); $("#tip2").attr("aria-hidden","true").addClass("hidden"); $(".slidesjs-stop.slidesjs-navigation, .slidesjs-play.slidesjs-navigation").attr('title', ''); $("a#playtitle").focus(function(){ $("#tip1").attr("aria-hidden","false").removeClass("hidden"); }); $("a#playtitle").mouseover(function(){ $("#tip1").attr("aria-hidden","false").removeClass("hidden"); }); $("a#playtitle").blur(function(){ $("#tip1").attr("aria-hidden","true").addClass("hidden"); }); $("a#playtitle").mouseleave(function(){ $("#tip1").attr("aria-hidden","true").addClass("hidden"); }); $("a#play").keydown(function(ev){ if (ev.which ==27) { $("#tip1").attr("aria-hidden","true").addClass("hidden"); ev.preventDefault(); return false; } }); $("a#stoptitle").focus(function(){ $("#tip2").attr("aria-hidden","false").removeClass("hidden"); }); $("a#stoptitle").mouseover(function(){ $("#tip2").attr("aria-hidden","false").removeClass("hidden"); }); $("a#stoptitle").blur(function(){ $("#tip2").attr("aria-hidden","true").addClass("hidden"); }); $("a#stoptitle").mouseleave(function(){ $("#tip2").attr("aria-hidden","true").addClass("hidden"); }); $("a#stoptitle").keydown(function(ev){ if (ev.which ==27) { $("#tip2").attr("aria-hidden","true").addClass("hidden"); ev.preventDefault(); return false; } }); }); // End This code is added by iTalent as part of iTrack 1859082
Top Solution Authors