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 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




