All Products
Search
Document Center

Elasticsearch:Transport Client (5.x)

Last Updated:Mar 27, 2026
Penting

Transport Client telah ditinggalkan (deprecated) dalam Elasticsearch open source. Untuk proyek baru, gunakan Java Low Level REST Client, yang menyediakan kompatibilitas versi lintas semua rilis Elasticsearch.

Topik ini menjelaskan cara menggunakan Transport Client 5.3.3 untuk terhubung ke kluster Alibaba Cloud Elasticsearch V5.x melalui TCP.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Penting

Jika Auto Indexing tidak diaktifkan, error akan muncul saat Anda mengindeks dokumen. Error

Konfigurasi akses jaringan

Pilih metode koneksi berdasarkan lokasi eksekusi client Java Anda.

Internet (titik akhir publik)

Jika client Java Anda berada di luar virtual private cloud (VPC):

  1. Aktifkan Public Network Access untuk kluster Anda.

  2. Tambahkan alamat IP publik client Anda ke daftar putih alamat IP publik kluster. Lihat Konfigurasi daftar putih alamat IP publik atau privat untuk kluster Elasticsearch.

Penting
  • Jika client Anda berada di jaringan rumahan atau LAN kantor, tambahkan alamat IP egress Internet ke daftar putih, bukan alamat IP privat client tersebut.

  • Menambahkan 0.0.0.0/0 ke daftar putih memungkinkan semua alamat IPv4 mengakses kluster. Evaluasi risiko keamanan sebelum menggunakan pengaturan ini.

  • Jika daftar putih tidak ada atau salah, koneksi akan gagal dengan error Timeout connecting.

  • Untuk mengakses node Kibana dari client, konfigurasikan daftar putih Kibana secara terpisah. Lihat Konfigurasi daftar putih alamat IP publik atau privat untuk Kibana.

VPC yang sama (titik akhir internal)

Jika client Java Anda berjalan di VPC yang sama dengan kluster Elasticsearch, gunakan titik akhir internal kluster tersebut. Daftar putih IP privat secara default adalah 0.0.0.0/0.

Tambahkan dependensi POM

Tambahkan dependensi berikut ke file pom.xml Anda:

<repositories>
    <!-- Elasticsearch Maven repository -->
    <repository>
        <id>elasticsearch-releases</id>
        <url>https://artifacts.elastic.co/maven</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>x-pack-transport</artifactId>
        <version>5.3.3</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>5.3.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.7.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.7.1</version>
    </dependency>
</dependencies>
Penting

Kerentanan eksekusi kode remote (RCE) mungkin ada pada Apache Log4j. Lihat Pemberitahuan kerentanan | Kerentanan RCE pada Apache Log4j 2 untuk detail dan langkah mitigasi.

Terhubung ke kluster

Kode berikut menunjukkan cara menginisialisasi koneksi Transport Client. Ganti placeholder dengan nilai aktual kluster Anda.

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.xpack.client.PreBuiltXPackTransportClient;

import java.net.InetAddress;

// Inisialisasi Transport Client
TransportClient client = new PreBuiltXPackTransportClient(Settings.builder()
        .put("cluster.name", "<cluster-id>")                        // ID kluster Anda
        .put("xpack.security.user", "elastic:<password>")          // Username dan password
        .put("client.transport.sniff", false)                      // Harus bernilai false
        .build())
        .addTransportAddress(new InetSocketTransportAddress(
                InetAddress.getByName("<endpoint>"), 9300));        // Titik akhir (tanpa http://) dan port

// Tutup client setelah selesai
client.close();
Parameter Deskripsi
cluster.name ID kluster Elasticsearch Anda. Dapatkan dari halaman Basic Information. Lihat Lihat informasi dasar kluster.
xpack.security.user Username dan password dalam format username:password. Username default adalah elastic. Untuk mengatur ulang password, lihat Atur ulang password akses kluster Elasticsearch.
client.transport.sniff Atur ke false.
InetAddress.getByName() Titik akhir kluster dan port 9300. Titik akhir tidak boleh diawali dengan http://.

Ganti placeholder berikut:

Placeholder Deskripsi Contoh
<cluster-id> ID kluster Elasticsearch Anda es-cn-n6w1rux8i000w****
<password> Password untuk pengguna elastic
<endpoint> Titik akhir publik atau internal kluster es-cn-n6w1rux8i000w****.public.elasticsearch.aliyuncs.com

Contoh

Contoh berikut terhubung ke kluster, menulis dokumen ke indeks, lalu mengambilnya kembali. Unduh kode contoh lengkap.

import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.xpack.client.PreBuiltXPackTransportClient;

import static org.elasticsearch.common.xcontent.XContentFactory.*;

import java.net.InetAddress;

public class TransportClientDemo {

    public static void main(String[] args) {
        try {
            // Inisialisasi client
            TransportClient client = new PreBuiltXPackTransportClient(Settings.builder()
                    .put("cluster.name", "es-cn-n6w1rux8i000w****")
                    .put("xpack.security.user", "elastic:es_password")
                    .put("client.transport.sniff", false)
                    .build())
                    .addTransportAddress(new InetSocketTransportAddress(
                            InetAddress.getByName("es-cn-n6w1rux8i000w****.public.elasticsearch.aliyuncs.com"), 9300));

            // Menulis dokumen ke indeks
            IndexResponse idxResp3 = client.prepareIndex("test_index", "test_type", "333")
                    .setSource(jsonBuilder()
                            .startObject()
                            .field("user_id", "333")
                            .field("email", "a***@aliyun.com")
                            .endObject()
                    )
                    .get();
            System.out.println(idxResp3.toString());

            // Mengambil dokumen
            GetResponse getResp = client.prepareGet()
                    .setIndex("test_index")
                    .setType("test_type")
                    .setId("333")
                    .execute()
                    .get();
            System.out.println(getResp.getSourceAsString());

            client.close();

        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

Pemecahan Masalah

`NoNodeAvailableException`

Error ini terjadi ketika Anda menggunakan Transport Client 5.5 atau 5.6 untuk terhubung ke kluster Elasticsearch V5.x. Gunakan Transport Client 5.3.3 sebagai gantinya.

`Timeout connecting`

Kluster tidak dapat dijangkau. Periksa bahwa:

  • Alamat IP client Anda ada dalam daftar putih kluster (publik atau privat, tergantung jaringan Anda).

  • Anda menggunakan titik akhir yang benar (publik vs. internal) sesuai lingkungan jaringan Anda.

  • Entri daftar putih menggunakan alamat IP egress Internet, bukan IP privat, untuk client di jaringan rumahan atau LAN kantor.

Error Auto Indexing saat menulis dokumen

Jika muncul error saat menulis dokumen, kemungkinan Auto Indexing dinonaktifkan. Aktifkan fitur tersebut dalam konfigurasi YML kluster. Lihat Konfigurasi file YML.

Langkah Berikutnya