# 5 minutes quick start

  1. Pull a Kuiper Docker image from https://hub.docker.com/r/emqx/kuiper/tags. It's recommended to use alpine image in this tutorial (refer to Kuiper Docker (opens new window) for the difference of Kuiper Docker image variants).

  2. Set Kuiper source to an MQTT server. This sample uses server locating at tcp://broker.emqx.io:1883. broker.emqx.io is a public MQTT test server hosted by EMQ (opens new window).

    docker run -p 9081:9081 -d --name kuiper -e MQTT_SOURCE__DEFAULT__SERVERS=[tcp://broker.emqx.io:1883] emqx/kuiper:$tag
    
    1
  3. Create a stream - the stream is your stream data schema, similar to table definition in database. Let's say the temperature & humidity data are sent to broker.emqx.io, and those data will be processed in your LOCAL RUN Kuiper docker instance. Below steps will create a stream named demo, and data are sent to devices/device_001/messages topic, while device_001 could be other devices, such as device_002, all of those data will be subscribed and handled by demo stream.

    -- In host
    # docker exec -it kuiper /bin/sh
    
    -- In docker instance
    # bin/kuiper create stream demo '(temperature float, humidity bigint) WITH (FORMAT="JSON", DATASOURCE="devices/+/messages")'
    Connecting to 127.0.0.1:20498...
    Stream demo is created.
    
    # bin/kuiper query
    Connecting to 127.0.0.1:20498...
    kuiper > select * from demo where temperature > 30;
    Query was submit successfully.
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
  4. Publish sensor data to topic devices/device_001/messages of server tcp://broker.emqx.io:1883 with any MQTT client tools (opens new window). Below sample uses mosquitto_pub.

    # mosquitto_pub -h broker.emqx.io -m '{"temperature": 40, "humidity" : 20}' -t devices/device_001/messages
    
    1
  5. If everything goes well, you can see the message is print on docker bin/kuiper query window. Please try to publish another message with temperature less than 30, and it will be filtered by WHERE condition of the SQL.

    kuiper > select * from demo WHERE temperature > 30;
    [{"temperature": 40, "humidity" : 20}]
    
    1
    2

    If having any problems, please take a look at log/stream.log.

  6. To stop the test, just press ctrl + c in bin/kuiper query command console, or input exit and press enter.

You can also refer to Kuiper dashboard documentation (opens new window) for better using experience.

Next for exploring more powerful features of EMQ X Kuiper? Refer to below for how to apply EMQ X Kuiper in edge and integrate with AWS / Azure IoT cloud.