[![Maven Central](https://img.shields.io/maven-central/v/org.tikv/tikv-client-java.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:%22org.tikv%22%20AND%20a:%22tikv-client-java%22) [![Slack](https://img.shields.io/badge/chat-on%20Slack-brightgreen.svg)](https://slack.tidb.io/invite?team=tikv-wg&channel=client) [![codecov](https://codecov.io/gh/tikv/client-java/branch/master/graph/badge.svg?token=nSAjGaN0EH)](https://codecov.io/gh/tikv/client-java) ## TiKV JAVA Client A Java client for [TiDB](https://github.com/pingcap/tidb)/[TiKV](https://github.com/tikv/tikv). It is supposed to: + Communicate via [gRPC](http://www.grpc.io/) + 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](https://github.com/birdstorm/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 ```xml org.tikv tikv-client-java 3.1.0 ``` ### Entrance `org.tikv.raw.RawKVClient` ### Create a RawKVClient ```java 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 #### tikv.rawkv.default_backoff_in_ms - RawKV default backoff in milliseconds - default: 20000 (20 seconds) #### tikv.rawkv.read_timeout_in_ms - RawKV read timeout in milliseconds. This parameter controls the timeout of `get` `getKeyTTL`. - default: 2000 (2 seconds) #### tikv.rawkv.write_timeout_in_ms - RawKV write timeout in milliseconds. This parameter controls the timeout of `put` `putAtomic` `putIfAbsent` `delete` `deleteAtomic`. - default: 2000 (2 seconds) #### tikv.rawkv.batch_read_timeout_in_ms - RawKV batch read timeout in milliseconds. This parameter controls the timeout of `batchGet`. - default: 2000 (2 seconds) #### tikv.rawkv.batch_write_timeout_in_ms - RawKV batch write timeout in milliseconds. This parameter controls the timeout of `batchPut` `batchDelete` `batchDeleteAtomic`. - default: 2000 (2 seconds) #### tikv.rawkv.scan_timeout_in_ms - RawKV scan timeout in milliseconds. This parameter controls the timeout of `batchScan` `scan` `scanPrefix`. - default: 10000 (10 seconds) #### tikv.rawkv.clean_timeout_in_ms - RawKV clean timeout in milliseconds. This parameter controls the timeout of `deleteRange` `deletePrefix`. - default: 600000 (10 minutes) ## 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. ```yaml - 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](/metrics/grafana/client_java_summary.json) to Grafana. ## License Apache 2.0 license. See the [LICENSE](./LICENSE) file for details.