TiKV Java Client
Go to file
ti-srebot d0b4965ce5
Try other peer when current leader of this region is not available. (#232) (#234)
* cherry pick #232 to release-3.1

Signed-off-by: ti-srebot <ti-srebot@pingcap.com>

* fix bug

Signed-off-by: Little-Wallace <bupt2013211450@gmail.com>

Co-authored-by: Wallace <bupt2013211450@gmail.com>
2021-07-18 23:11:49 +09:00
.ci refactor follower read (#126) (#209) 2021-06-23 15:02:51 +08:00
.github add issue and pr template (#157) (#158) 2021-03-30 13:53:19 +08:00
config refactor follower read (#126) (#209) 2021-06-23 15:02:51 +08:00
dev Reform java client to combine with TiSpark's java client (#91) 2020-10-21 19:10:18 +08:00
metrics/grafana Support metrics with multiple TiSessions with the same port (#220) (#222) 2021-06-29 15:44:06 +08:00
scripts Fix putIfAbsent API name (#149) 2021-03-25 17:04:12 +08:00
src Try other peer when current leader of this region is not available. (#232) (#234) 2021-07-18 23:11:49 +09:00
.gitignore Fix gradle build (#50) 2019-02-27 14:57:55 +08:00
LICENSE init 2018-11-15 17:11:42 +08:00
README.md Support metrics with multiple TiSessions with the same port (#220) (#222) 2021-06-29 15:44:06 +08:00
pom.xml bump version to v3.1.2-SNAPSHOT 2021-07-01 06:08:06 +08:00

README.md

TiKV JAVA Client

A Java client for TiDB/TiKV. It is supposed to:

  • Communicate via gRPC
  • Talk to Placement Driver searching for a region
  • Talk to TiKV for reading/writing data and the resulted data is encoded/decoded just like what we do in TiDB.
  • Talk to Coprocessor for calculation pushdown

How to build

Maven

The alternative way to build a usable jar for testing will be

mvn clean install -Dmaven.test.skip=true

The following command can install dependencies for you.

mvn package

The jar can be found in ./target/

Usage

This project is designed to hook with [pd](https://github.com/tikv/pd) and [tikv](https://github.com/tikv/tikv).

When you work with this project, you have to communicate with pd and tikv. Please run TiKV and PD in advance.

Component: Raw Ti-Client in Java

Java Implementation of Raw TiKV-Client to support RawKVClient commands.

Demo is avaliable in KVRawClientTest

Build

mvn clean install -Dmaven.test.skip=true

Add to dependency

Use jar for binary

Add your jar built with all dependencies into you project's library to use tikv-client-java as dependency

Use as maven dependency

After building, add following lines into your pom.xml if you are using Maven

<dependency>
	<groupId>org.tikv</groupId>
	<artifactId>tikv-client-java</artifactId>
	<version>3.1.0</version>
</dependency>

Entrance

org.tikv.raw.RawKVClient

Create a RawKVClient

import org.tikv.common.TiConfiguration;
import org.tikv.common.TiSession;
import org.tikv.raw.RawKVClient;

public class Main {
	public static void main() {
		// You MUST create a raw configuration if you are using RawKVClient.
		TiConfiguration conf = TiConfiguration.createRawDefault(YOUR_PD_ADDRESSES);
		TiSession session = TiSession.create(conf);
		RawKVClient client = session.createRawClient();
	}
}

Java Client Configuration Parameter

JVM Parameter

The following includes JVM related parameters.

tikv.pd.addresses

  • pd addresses, separated by comma
  • default: 127.0.0.1:2379

tikv.grpc.timeout_in_ms

  • timeout of grpc request
  • default: 600ms

tikv.grpc.scan_timeout_in_ms

  • timeout of scan/delete range grpc request
  • default: 20s

Metrics Parameter

tikv.metrics.enable

  • whether to enable metrics exporting
  • default: false

tikv.metrics.port

  • the metrics exporting http port
  • default: 3140

ThreadPool Parameter

The following includes ThreadPool related parameters, which can be passed in through JVM parameters.

tikv.batch_get_concurrency

  • the thread pool size of batchGet on client side
  • default: 20

tikv.batch_put_concurrency

  • the thread pool size of batchPut on client side
  • default: 20

tikv.batch_delete_concurrency

  • the thread pool size of batchDelete on client side
  • default: 20

tikv.batch_scan_concurrency

  • the thread pool size of batchScan on client side
  • default: 5

tikv.delete_range_concurrency

  • the thread pool size of deleteRange on client side
  • default: 20

Metrics

Client Java supports exporting metrics to Prometheus using poll mode and viewing on Grafana. The following steps shows how to enable this function.

Step 1: Enable metrics exporting

  • set the config tikv.metrics.enable to true
  • call TiConfiguration.setMetricsEnable(true)

Step 2: Set the metrics port

  • set the config tikv.metrics.port
  • call TiConfiguration.setMetricsPort

Default port is 3140.

Step 3: Config Prometheus

Add the following config to conf/prometheus.yml and restart Prometheus.

- job_name: "tikv-client"
    honor_labels: true
    static_configs:
    - targets:
        - '127.0.0.1:3140'
        - '127.0.0.2:3140'
        - '127.0.0.3:3140'

Step 4: Config Grafana

Import the Client-Java-Summary dashboard config to Grafana.

License

Apache 2.0 license. See the LICENSE file for details.