All Products
Search
Document Center

E-MapReduce:Routine Load

Last Updated:May 20, 2026

Routine Load secara terus-menerus mengimpor data dari Apache Kafka ke StarRocks pada EMR. Setelah job load berjalan, StarRocks melakukan polling topik Kafka secara otomatis—Anda mengontrol siklus hidup job tersebut dengan pernyataan SQL (pause, resume, atau stop).

Istilah

  • RoutineLoadJob: job impor rutin yang telah diajukan

  • JobScheduler: penjadwal job impor rutin yang digunakan untuk menjadwalkan dan membagi RoutineLoadJob menjadi beberapa task

  • Task: task yang dibagi dari RoutineLoadJob oleh JobScheduler berdasarkan aturan tertentu

  • TaskScheduler: penjadwal task yang digunakan untuk menjadwalkan eksekusi sebuah task

Prinsip dasar

Gambar berikut menunjukkan proses impor Routine Load. Routine Load

Langkah-langkah berikut menjelaskan cara mengimpor data menggunakan Routine Load.

  1. Anda mengirimkan job impor Kafka ke frontend menggunakan client yang mendukung protokol MySQL.

  2. Frontend membagi job impor menjadi beberapa task. Setiap task mengimpor bagian data tertentu.

  3. Setiap task ditugaskan ke backend tertentu untuk dieksekusi. Di backend, task tersebut dianggap sebagai job impor biasa dan mengimpor data berdasarkan mekanisme impor Stream Load.

  4. Setelah proses impor selesai di backend, backend melaporkan hasil impor ke frontend.

  5. Frontend terus menghasilkan task baru atau mencoba ulang task yang gagal berdasarkan hasil impor.

  6. Frontend terus menghasilkan task baru untuk mencapai impor data tanpa gangguan.

Catatan

Gambar dan beberapa informasi dalam topik ini berasal dari Continuously load data from Apache Kafka dari StarRocks open source.

Proses impor

Prasyarat

  • Anda dapat terhubung ke kluster Kafka yang tidak menggunakan otentikasi maupun yang menggunakan otentikasi SSL.

  • Format pesan berikut didukung:

    • Format CSV, di mana setiap pesan merupakan satu baris tanpa karakter newline di akhir.

    • Format JSON.

  • Tipe data Array tidak didukung.

  • Hanya Kafka versi 0.10.0.0 ke atas yang didukung.

Buat job impor

  • Sintaks

    CREATE ROUTINE LOAD <database>.<job_name> ON <table_name>
        [COLUMNS TERMINATED BY "column_separator" ,]
        [COLUMNS (col1, col2, ...) ,]
        [WHERE where_condition ,]
        [PARTITION (part1, part2, ...)]
        [PROPERTIES ("key" = "value", ...)]
        FROM [DATA_SOURCE]
        [(data_source_properties1 = 'value1',
        data_source_properties2 = 'value2',
        ...)]

    Tabel berikut menjelaskan parameter-parameter tersebut.

    Parameter

    Wajib

    Deskripsi

    job_name

    Ya

    Nama job impor. Nama database impor dapat ditempatkan di awal. Nama biasanya dalam format timestamp ditambah nama tabel. Nama job harus unik dalam satu database.

    table_name

    Ya

    Nama tabel tujuan.

    COLUMNS TERMINATED clause

    Tidak

    Pemisah kolom dalam file data sumber. Nilai default: \t.

    COLUMNS clause

    Tidak

    Pemetaan antara kolom dalam file data sumber dan kolom dalam tabel tujuan.

    • Kolom yang dipetakan: Misalnya, tabel tujuan memiliki tiga kolom, col1, col2, dan col3, sedangkan file data sumber memiliki empat kolom, dan kolom pertama, kedua, dan keempat dalam tabel tujuan masing-masing sesuai dengan col2, col1, dan col3 dalam file data sumber. Dalam kasus ini, klausa dapat ditulis sebagai COLUMNS (col2, col1, temp, col3). Kolom temp tidak ada dan digunakan untuk melewati kolom ketiga dalam file data sumber.

    • Kolom turunan: StarRocks tidak hanya dapat membaca data dalam kolom file data sumber tetapi juga menyediakan operasi pemrosesan pada kolom data. Misalnya, kolom col4 ditambahkan ke tabel tujuan, dan nilai col4 sama dengan nilai col1 ditambah nilai col2. Dalam kasus ini, klausa dapat ditulis sebagai COLUMNS (col2, col1, temp, col3, col4 = col1 + col2).

    WHERE clause

    Tidak

    Kondisi filter yang ingin Anda gunakan untuk menyaring baris yang tidak diperlukan. Kondisi filter dapat ditentukan pada kolom yang dipetakan atau kolom turunan.

    Misalnya, jika hanya baris dengan k1 lebih besar dari 100 dan k2 sama dengan 1000 yang diimpor, klausa dapat ditulis sebagai WHERE k1 > 100 and k2 = 1000.

    PARTITION clause

    Tidak

    Partisi tabel tujuan. Jika Anda tidak menentukan partisi, file data sumber akan secara otomatis diimpor ke partisi yang sesuai.

    PROPERTIES clause

    Tidak

    Parameter umum untuk job impor.

    desired_concurrent_number

    Tidak

    Jumlah maksimum task yang dapat dibagi dari job impor. Nilainya harus lebih besar dari 0. Nilai default: 3.

    max_batch_interval

    Tidak

    Durasi eksekusi maksimum setiap task. Nilai valid: 5 hingga 60. Satuan: detik. Nilai default: 10.

    Pada V1.15 dan versi selanjutnya, parameter ini menentukan waktu penjadwalan task. Anda dapat menentukan seberapa sering task dieksekusi. routine_load_task_consume_second dalam fe.conf menentukan jumlah waktu yang diperlukan task untuk mengonsumsi data. Nilai default: 3 detik. routine_load_task_timeout_second dalam fe.conf menentukan periode timeout eksekusi task. Nilai default: 15 detik.

    max_batch_rows

    Tidak

    Jumlah maksimum baris yang dapat dibaca setiap task. Nilainya harus lebih besar dari atau sama dengan 200000. Nilai default: 200000.

    Pada V1.15 dan versi selanjutnya, parameter ini hanya digunakan untuk menentukan rentang jendela deteksi error. Rentang jendela tersebut adalah 10 × max-batch-rows.

    max_batch_size

    Tidak

    Jumlah maksimum byte yang dapat dibaca setiap task. Satuan: byte. Nilai valid: 100 MB hingga 1 GB. Nilai default: 100 MB.

    Pada V1.15 dan versi selanjutnya, parameter ini tidak digunakan lagi. routine_load_task_consume_second dalam fe.conf menentukan jumlah waktu yang diperlukan task untuk mengonsumsi data. Nilai default: 3 detik.

    max_error_number

    Tidak

    Jumlah maksimum baris error yang diizinkan dalam jendela sampling. Nilainya harus lebih besar dari atau sama dengan 0. Nilai default: 0. Tidak ada baris error yang diizinkan.

    Penting

    Baris yang disaring oleh kondisi WHERE bukan merupakan baris error.

    strict_mode

    Tidak

    Menentukan apakah mode ketat diaktifkan. Secara default, mode ini diaktifkan.

    Jika tipe kolom data mentah non-null berubah menjadi NULL setelah Anda mengaktifkan mode ketat, data tersebut akan disaring. Untuk menonaktifkan mode ketat, atur parameter ini ke false.

    timezone

    Tidak

    Zona waktu yang digunakan untuk job impor.

    Secara default, nilai parameter timezone dari session digunakan. Parameter ini memengaruhi hasil semua fungsi terkait zona waktu yang terlibat dalam impor.

    DATA_SOURCE

    Ya

    Jenis sumber data. Atur nilainya ke KAFKA.

    data_source_properties

    Tidak

    Informasi tentang sumber data. Nilainya mencakup bidang-bidang berikut:

    • kafka_broker_list: informasi koneksi broker Kafka. Format: ip:host. Pisahkan beberapa broker dengan koma (,).

    • kafka_topic: topik Kafka yang ingin Anda langgani.

      Catatan

      Bidang kafka_broker_list dan kafka_topic wajib diisi.

    • kafka_partitions dan kafka_offsets: partisi Kafka yang ingin Anda langgani dan offset awal setiap partisi.

    • property: properti terkait Kafka. Bidang ini setara dengan parameter --property dalam Kafka Shell. Anda dapat menjalankan perintah HELP ROUTINE LOAD; untuk melihat sintaks lebih rinci untuk membuat job impor.

    Catatan

    Anda dapat menjalankan perintah HELP ROUTINE LOAD; untuk melihat sintaks lebih rinci untuk membuat job impor.

  • Contoh ini membuat job impor Routine Load bernama example_tbl2_ordertest. Job ini tidak menggunakan autentikasi dan terus-menerus mengonsumsi pesan dari topik ordertest2 di kluster Kafka serta mengimpornya ke tabel example_tbl. Job ini mulai mengonsumsi dari offset paling awal yang tersedia di partisi yang ditentukan.

    CREATE ROUTINE LOAD load_test.example_tbl2_ordertest ON example_tbl
    COLUMNS(commodity_id, customer_name, country, pay_time, price, pay_dt=from_unixtime(pay_time, '%Y%m%d'))
    PROPERTIES
    (
        "desired_concurrent_number"="5",
        "format" ="json",
        "jsonpaths" ="[\"$.commodity_id\",\"$.customer_name\",\"$.country\",\"$.pay_time\",\"$.price\"]"
     )
    FROM KAFKA
    (
        "kafka_broker_list" ="<kafka_broker1_ip>:<kafka_broker1_port>,<kafka_broker2_ip>:<kafka_broker2_port>",
        "kafka_topic" = "ordertest2",
        "kafka_partitions" ="0,1,2,3,4",
        "property.kafka_default_offsets" = "OFFSET_BEGINNING"
    );
  • Contoh berikut menunjukkan cara mengonfigurasi koneksi ke Kafka menggunakan SSL.

    -- Tentukan SSL sebagai protokol keamanan.
    "property.security.protocol" = "ssl", 
    
     -- Tentukan lokasi sertifikat CA.
    "property.ssl.ca.location" = "FILE:ca-cert",
    
    -- Jika autentikasi klien diaktifkan di server Kafka, Anda juga harus mengatur tiga parameter berikut:
    -- Lokasi kunci publik klien.
    "property.ssl.certificate.location" = "FILE:client.pem", 
    -- Lokasi kunci privat klien.
    "property.ssl.key.location" = "FILE:client.key", 
    -- Password untuk kunci privat klien.
    "property.ssl.key.password" = "******"

    Untuk informasi lebih lanjut tentang pembuatan file, lihat CREATE FILE.

    Catatan

    Saat menggunakan CREATE FILE, gunakan endpoint HTTP Object Storage Service (OSS) sebagai url. Untuk informasi lebih lanjut, lihat Gunakan endpoint yang mendukung IPv6 untuk mengakses OSS.

Lihat status job

  • Tampilkan semua job Routine Load di database load_test, termasuk job yang dihentikan atau dibatalkan. Hasilnya dapat berisi satu atau beberapa baris.

    USE load_test;
    SHOW ALL ROUTINE LOAD;
  • Tampilkan job Routine Load yang sedang berjalan bernama example_tbl2_ordertest di database load_test.

    SHOW ROUTINE LOAD FOR load_test.example_tbl2_ordertest;
  • Di Konsol EMR StarRocks Manager, klik Metadata Management. Klik nama database target, klik Tasks, lalu lihat status job di tab Kafka Import.

Penting

StarRocks hanya menampilkan job yang sedang berjalan. Job yang telah selesai dan tertunda tidak terlihat.

Jalankan perintah SHOW ALL ROUTINE LOAD untuk melihat semua job Routine Load yang sedang berjalan. Berikut contoh outputnya.

*************************** 1. row ***************************

                  Id: 14093
                Name: routine_load_wikipedia
          CreateTime: 2020-05-16 16:00:48
           PauseTime: N/A
             EndTime: N/A
              DbName: default_cluster:load_test
           TableName: routine_wiki_edit
               State: RUNNING
      DataSourceType: KAFKA
      CurrentTaskNum: 1
       JobProperties: {"partitions":"*","columnToColumnExpr":"event_time,channel,user,is_anonymous,is_minor,is_new,is_robot,is_unpatrolled,delta,added,deleted","maxBatchIntervalS":"10","whereExpr":"*","maxBatchSizeBytes":"104857600","columnSeparator":"','","maxErrorNum":"1000","currentTaskConcurrentNum":"1","maxBatchRows":"200000"}
DataSourceProperties: {"topic":"starrocks-load","currentKafkaPartitions":"0","brokerList":"localhost:9092"}
    CustomProperties: {}
           Statistic: {"receivedBytes":150821770,"errorRows":122,"committedTaskNum":12,"loadedRows":2399878,"loadRowsRate":199000,"abortedTaskNum":1,"totalRows":2400000,"unselectedRows":0,"receivedBytesRate":12523000,"taskExecuteTimeMs":12043}
            Progress: {"0":"13634667"}
ReasonOfStateChanged:
        ErrorLogUrls: http://172.26.**.**:9122/api/_load_error_log?file=__shard_53/error_log_insert_stmt_47e8a1d107ed4932-8f1ddf7b01ad2fee_47e8a1d107ed4932_8f1ddf7b01ad2fee, http://172.26.**.**:9122/api/_load_error_log?file=__shard_54/error_log_insert_stmt_e0c0c6b040c044fd-a162b16f6bad53e6_e0c0c6b040c044fd_a162b16f6bad53e6, http://172.26.**.**:9122/api/_load_error_log?file=__shard_55/error_log_insert_stmt_ce4c95f0c72440ef-a442bb300bd743c8_ce4c95f0c72440ef_a442bb300bd743c8
            OtherMsg:
1 row in set (0.00 sec)

Contoh ini menunjukkan job impor yang sedang berjalan bernama routine_load_wikipedia. Tabel berikut menjelaskan parameter dalam output tersebut.

Parameter

Deskripsi

State

Status job impor. RUNNING menunjukkan bahwa job sedang aktif.

Statistic

Statistik tentang job impor sejak pembuatannya.

receivedBytes

Ukuran data yang diterima, dalam byte.

errorRows

Jumlah baris yang gagal diimpor.

committedTaskNum

Jumlah task yang diajukan oleh node frontend (FE).

loadedRows

Jumlah baris yang diimpor.

loadRowsRate

Laju impor data, dalam baris per detik (baris/detik).

abortedTaskNum

Jumlah task yang gagal di BE.

totalRows

Jumlah total baris yang diterima.

unselectedRows

Jumlah baris yang disaring oleh kondisi WHERE.

receivedBytesRate

Laju penerimaan data, dalam byte per detik (byte/detik).

taskExecuteTimeMs

Durasi impor, dalam milidetik.

ErrorLogUrls

Menyediakan URL untuk melihat pesan error dari proses impor.

Jeda job impor

Gunakan pernyataan PAUSE untuk menjeda job impor. Job tersebut masuk ke status PAUSED, dan impor data dihentikan sementara. Job yang dijeda tidak dihentikan dan dapat dilanjutkan kembali dengan menggunakan pernyataan RESUME.

PAUSE ROUTINE LOAD FOR <job_name>;

Setelah Anda menjeda job impor, State-nya berubah menjadi PAUSED, dan informasi dalam Statistic dan Progress berhenti diperbarui. Karena job tidak dihentikan, Anda masih dapat melihatnya dengan menjalankan pernyataan SHOW ROUTINE LOAD.

Lanjutkan job impor

Gunakan pernyataan RESUME untuk melanjutkan job yang dijeda. Job tersebut sejenak masuk ke status NEED_SCHEDULE, yang menunjukkan bahwa job sedang dijadwalkan ulang. Kemudian job kembali ke status RUNNING dan melanjutkan impor data.

RESUME ROUTINE LOAD FOR <job_name>;

Hentikan job impor

Gunakan pernyataan STOP untuk menghentikan job impor. Job tersebut masuk ke status STOPPED, impor data berhenti, dan job dihentikan. Anda tidak dapat melanjutkan kembali job yang telah dihentikan.

STOP ROUTINE LOAD FOR <job_name>;

Setelah Anda menghentikan job impor, State job berubah menjadi STOPPED, dan informasi impor dalam Statistic dan Progress tidak lagi diperbarui. Anda tidak dapat lagi melihat job impor yang dihentikan dengan menggunakan pernyataan SHOW ROUTINE LOAD.stop

Tutorial

Tutorial ini menunjukkan cara membuat job impor Routine Load untuk terus-menerus mengonsumsi data berformat CSV dari kluster Kafka dan memuatnya ke StarRocks.

  1. Di kluster Kafka Anda, lakukan langkah-langkah berikut.

    1. Buat topik uji coba.

      kafka-topics.sh --create  --topic order_sr_topic --replication-factor 3 --partitions 10 --bootstrap-server "core-1-1:9092,core-1-2:9092,core-1-3:9092"
    2. Jalankan perintah berikut untuk memulai konsol produsen Kafka.

      kafka-console-producer.sh  --broker-list core-1-1:9092 --topic order_sr_topic
    3. Masukkan data uji coba.

      2020050802,2020-05-08,Johann Georg Faust,Deutschland,male,895
      2020050802,2020-05-08,Julien Sorel,France,male,893
      2020050803,2020-05-08,Dorian Grey,UK,male,1262
      2020051001,2020-05-10,Tess Durbeyfield,US,female,986
      2020051101,2020-05-11,Edogawa Conan,japan,male,8924
  2. Di kluster StarRocks Anda, lakukan langkah-langkah berikut.

    1. Jalankan perintah berikut untuk membuat database dan tabel tujuan.

      Buat tabel bernama routine_load_tbl_csv di database load_test kluster StarRocks Anda. Skema tabel harus sesuai dengan kolom yang ingin Anda impor dari data CSV. Dalam contoh ini, Anda mengimpor data ke lima kolom sambil melewati kolom kelima (jenis kelamin) dari data sumber.

      CREATE TABLE load_test.routine_load_tbl_csv (
          `order_id` bigint NOT NULL COMMENT "Order ID",
          `pay_dt` date NOT NULL COMMENT "Tanggal pembayaran",
          `customer_name` varchar(26) NULL COMMENT "Nama pelanggan",
          `nationality` varchar(26) NULL COMMENT "Kebangsaan",
          `price` double NULL COMMENT "Jumlah pembayaran"
      )
      ENGINE=OLAP
      PRIMARY KEY (order_id,pay_dt)
      DISTRIBUTED BY HASH(`order_id`) BUCKETS 5;
    2. Jalankan perintah berikut untuk membuat job impor.

      CREATE ROUTINE LOAD load_test.routine_load_tbl_ordertest_csv ON routine_load_tbl_csv
      COLUMNS TERMINATED BY ",",
      COLUMNS (order_id, pay_dt, customer_name, nationality, temp_gender, price)
      PROPERTIES
      (
          "desired_concurrent_number" = "5"
      )
      FROM KAFKA
      (
          "kafka_broker_list" ="192.168.**.**:9092,192.168.**.**:9092,192.168.**.**:9092",
          "kafka_topic" = "order_sr_topic",
          "kafka_partitions" ="0,1,2,3,4",
          "property.kafka_default_offsets" = "OFFSET_BEGINNING"
      )
    3. Jalankan perintah berikut untuk melihat informasi tentang job impor routine_load_tbl_ordertest_csv.

      SHOW ROUTINE LOAD FOR routine_load_tbl_ordertest_csv;

      Jika State bernilai RUNNING, job beroperasi dengan benar.

    4. Jalankan perintah berikut untuk mengkueri tabel tujuan dan memverifikasi bahwa data telah dimuat.

      SELECT * FROM routine_load_tbl_csv;

      Anda juga dapat melakukan operasi berikut pada job tersebut:

      • Jeda job impor

        PAUSE ROUTINE LOAD FOR routine_load_tbl_ordertest_csv;
      • Lanjutkan job impor

        RESUME ROUTINE LOAD FOR routine_load_tbl_ordertest_csv;
      • Ubah job impor

        Catatan

        Anda hanya dapat mengubah job yang berada dalam status PAUSED.

        Misalnya, ubah desired_concurrent_number menjadi 6.

        ALTER ROUTINE LOAD FOR routine_load_tbl_ordertest_csv
        PROPERTIES
        (
            "desired_concurrent_number" = "6"
        )
      • Hentikan job impor

        STOP ROUTINE LOAD FOR routine_load_tbl_ordertest_csv;