extend ../_components/base.pug

block pagetitle
    title Apache Ignite Streaming, Real-Time Data Processing
    meta(name="description", content="Apache Ignite data loading, streaming, and real-time processing capabilities allow to inject large amounts of data into an Ignite cluster in a scalable and fault-tolerant way. Learn more here.")
    link(rel="canonical", href="https://ignite.apache.org/features/streaming.html")

    meta(property="og:title", content="Apache Ignite Streaming, Real-Time Data Processing")
    meta(property="og:type", content="article")
    meta(property="og:url", content="https://ignite.apache.org/features/streaming.html")
    meta(property="og:image", content="/img/og-pic.png")
    meta(property="og:description", content="Apache Ignite data loading, streaming, and real-time processing capabilities allow to inject large amounts of data into an Ignite cluster in a scalable and fault-tolerant way. Learn more here.")

block css 
    link(rel="stylesheet", href="../css/native-persistence.css?ver=" + config.version)
    link(rel="stylesheet", href="../css/compute-apis.css?ver=" + config.version)
    link(rel="stylesheet", href="../css/streaming.css?ver=" + config.version)
 

  



block main
    - global.pageHref = "features"
    - config.hdrClassName = "hdr__blue"
    include ../_components/header.pug


    section.innerhero
        .container.innerhero__cont
            .innerhero__main
                .innerhero__pre.pb-3 Apache Ignite
                h1.h1.innerhero__h1 Real-Time Streaming<br> APIs
                .innerhero__descr.pt-2.h5.
                    Ingest streams of data and build  event-driven architectures
                .innerhero__action 
                    a.button.innerhero__button(href="https://ignite.apache.org/docs/latest/index") Start Coding
            img.innerhero__pic.innerhero__pic--stream(src="/img/features/streaming/hero-image.svg", alt="stream-hero")
    // /.innerhero

    section.stream1
       .container
          .stream1__block.flexi
              p.stream1__p.h4 With Apache Ignite you can<strong> load and stream</strong> large finite — or never-ending — volumes of data<strong> in a scalable and fault-tolerant way</strong> into the cluster.
              .stream1__part
                   img.stream1__img(src="/img/features/streaming/speed.png", alt="speed")
                   p.stream1__text The rate at which data can be injected into Ignite <strong>exceeds millions of events per second </strong>on a moderately sized cluster.
    // /.stream1

    section.stream2
       .container
           .stream2__block.flexi
              .stream2__content
                  h2.stream2__h2.h4 Ignite Core Streaming APIs
                  h3.stream2__h3 What are those APIs?
                  p.stream2__text With Ignite core streaming APIs such as IgniteDataStreamer you get basic streaming capabilities out of the box. You can stream and transform your data originating from multiple custom sources.<br><br>Ignite data streamers automatically buffer the data and group it into batches for better performance and send it in parallel to multiple nodes.
              img.stream2__img(src="/img/features/streaming/sql.svg", alt="sql")
    // /.stream2

    section.stream3
       .container
          h2.stream3__h2.h4 IgniteDataStreamer is used for:
          .stream3__blocks.flexi
               .stream3__block
                   .stream3__part.flexi
                       .compute2-points__item.fz20
                       p.stream3__text Data loading
                   .stream3__part.stream3__end.flexi.ml-04
                       .compute2-points__item.fz20
                       p.stream3__text Real-time data streaming
               .stream3__block
                   .stream3__part.stream3__first.flexi
                       .compute2-points__item.fz20
                       p.stream3__text Achieving advanced streaming capabilities by integrating with streaming frameworks:
                   .stream3__item.stream3__itemstart.flexi 
                       img.stream3__img(src="/img/features/streaming/one.png", alt="one")
                       img.stream3__img(src="/img/features/streaming/two.svg", alt="two")
                       img.stream3__img(src="/img/features/streaming/three.png", alt="three")
                   .stream3__item.flexi
                       img.stream3__img(src="/img/features/streaming/four.svg", alt="four")
                       img.stream3__img(src="/img/features/streaming/five.svg", alt="five")
                       img.stream3__img(src="/img/features/streaming/six.svg", alt="six")
    // /.stream3

    section.stream4
       .container
          h2.stream4__h2.h4 Event-Driven Architecture Basic Principles
          p.stream4__p In many cases, streams of data we receive comprise events that we have to react to.<br>
              span.stream4__greys With Apache Ignite, you can:
          .stream4__block.flexi
             .stream4__part
                .stream4__number 01
                .stream4__text Enrich and transform your data<br> on on-the-fly.
             .stream4__part.stream4__parttwo
                .stream4__number 02
                .stream4__text Execute any calculations in response<br> to an event on the cluster-node side.
             .stream4__part
                .stream4__number 03
                .stream4__text React to your streams of data on the application side with continuous queries.
                .stream4__grey If streamed data represents an event, your application-side logic can react to it after receiving a notification from continuous queries.


    // /.stream4              
                
           

    section.native-bottom.container
        .native-bottom__grid 
            article.nativebotblock
                .h4.nativebotblock__title
                    img(src="/img/features/native-rocket.svg", alt="").nativebotblock__icon
                    span Ready to Start?
                p.nativebotblock__text Start coding with Ignite Streaming APIs
                a.nativebotblock__link.arrowlink(href="https://ignite.apache.org/docs/latest/data-streaming", target="_blank") Ignite Streaming APIs
            article.nativebotblock.nativebotblock--learn
                .h4.nativebotblock__title
                    img(src="/img/features/native-docs.svg", alt="").nativebotblock__icon
                    span Want to Learn More?
                p.nativebotblock__text Explore our out-of-the-box integrations with Kafka, Flink, MQTT and other advanced streaming technologies
                a.nativebotblock__link.arrowlink(href="https://ignite.apache.org/docs/latest/extensions-and-integrations/streaming/kafka-streamer", target="_blank") Extensions And Integrations Guide




