1. 所需软件

  • JDK 1.8 环境
  • kafka 最新版本
  • ElasticSearch-5.6.9(使用版本7 显示过高,索性找了个靠谱点的)
  • Zipkin-server-2.12.9-exec

2. 配置参数

毕竟只是在 window 做个简单样例, 而这些服务默认都需要分配上G的JVM 内存, 资源宝贵, 所以修改各自服务的 JVM 参数, 避免还没开始,就已结束(系统资源耗尽).

给个参考值: Zipkin 128M, Kafka 256M, ElasticSearch 256M

  • kafka 修改目录文件: bin\window\kafka-server-start.bat
    需要区别 32位 和 64位系统, 按图示统一修改为 256M 即可
  • ES 目录文件: config\jvm.options
    这个修改相对简单一点, 找到 -Xms -Xmx 这两个参数, 分别设为 256M 即可
  • Zipkin 会随着命令行启动时指定

3. 启动服务

  1. 启动 Kafka 服务
    需要依次启动 zookeeper , kafka server, 创建名为 zipkin 的主题
    Kafka 相关操作可参考这边博文
  2. 启动 ES
    进入 ES 安装 bin目录, 双击 elasticsearch.bat 即可, 启动成功之后, 浏览器访问 http://localhost:9200 查看ES 版本信息, 如下图
  3. pinpoint 链路 kafka kafka链路追踪_java

  4. 启动 zipkin
    进入到 zipkin 存放目录, 进入命令行执行以下命令
java -DKAFKA_BOOTSTRAP_SERVERS=localhost:9092 -DKAFKA_TOPIC=zipkin -DSTORAGE_TYPE=elasticsearch -DES_HOSTS=http://localhost:9200 -Xms256M -Xmx256M -jar zipkin-server-2.12.9-exec.jar

浏览器访问 http://localhost:9411 验证 zipkin 服务是否成功

pinpoint 链路 kafka kafka链路追踪_Kafka_02

4. 测试

启动 kafka 生产者

输入以下数据, 这是一段文本,中间没有回车符

[{“traceId”:“5982fe77008310cc80f1da5e10147517”,“name”:“get”,“id”:“bd7a977555f6b982”,“timestamp”:1458702548467000,“duration”:386000,“localEndpoint”:{“serviceName”:“zipkin-query”,“ipv4”:“192.168.1.2”,“port”:9411},“annotations”:[{“timestamp”:1458702548467000,“value”:“sr”},{“timestamp”:1458702548853000,“value”:“ss”}]},{“traceId”:“5982fe77008310cc80f1da5e10147517”,“name”:“get-traces”,“id”:“ebf33e1a81dc6f71”,“parentId”:“bd7a977555f6b982”,“timestamp”:1458702548478000,“duration”:354374,“localEndpoint”:{“serviceName”:“zipkin-query”,“ipv4”:“192.168.1.2”,“port”:9411},“tags”:{“lc”:“JDBCSpanStore”,“request”:“QueryRequest{serviceName=zipkin-query,spanName=null,annotations=[],binaryAnnotations={},minDuration=null,maxDuration=null,endTs=1458702548478,lookback=86400000,limit=1}”}},{“traceId”:“5982fe77008310cc80f1da5e10147517”,“name”:“query”,“id”:“be2d01e33cc78d97”,“parentId”:“ebf33e1a81dc6f71”,“timestamp”:1458702548786000,“duration”:13000,“localEndpoint”:{“serviceName”:“zipkin-query”,“ipv4”:“192.168.1.2”,“port”:9411},“remoteEndpoint”:{“serviceName”:“spanstore-jdbc”,“ipv4”:“127.0.0.1”,“port”:3306},“annotations”:[{“timestamp”:1458702548786000,“value”:“cs”},{“timestamp”:1458702548799000,“value”:“cr”}],“tags”:{“jdbc.query”:“selectdistinctzipkin_spans.trace_idfromzipkin_spansjoinzipkin_annotationson(zipkin_spans.trace_id=zipkin_annotations.trace_idandzipkin_spans.id=zipkin_annotations.span_id)where(zipkin_annotations.endpoint_service_name=?andzipkin_spans.start_tsbetween?and?)orderbyzipkin_spans.start_tsdesclimit?”,“sa”:“true”}},{“traceId”:“5982fe77008310cc80f1da5e10147517”,“name”:“query”,“id”:“13038c5fee5a2f2e”,“parentId”:“ebf33e1a81dc6f71”,“timestamp”:1458702548817000,“duration”:1000,“localEndpoint”:{“serviceName”:“zipkin-query”,“ipv4”:“192.168.1.2”,“port”:9411},“remoteEndpoint”:{“serviceName”:“spanstore-jdbc”,“ipv4”:“127.0.0.1”,“port”:3306},“annotations”:[{“timestamp”:1458702548817000,“value”:“cs”},{“timestamp”:1458702548818000,“value”:“cr”}],“tags”:{“jdbc.query”:“selectzipkin_spans.trace_id,zipkin_spans.id,zipkin_spans.name,zipkin_spans.parent_id,zipkin_spans.debug,zipkin_spans.start_ts,zipkin_spans.durationfromzipkin_spanswherezipkin_spans.trace_idin(?)”,“sa”:“true”}},{“traceId”:“5982fe77008310cc80f1da5e10147517”,“name”:“query”,“id”:“37ee55f3d3a94336”,“parentId”:“ebf33e1a81dc6f71”,“timestamp”:1458702548827000,“duration”:2000,“localEndpoint”:{“serviceName”:“zipkin-query”,“ipv4”:“192.168.1.2”,“port”:9411},“remoteEndpoint”:{“serviceName”:“spanstore-jdbc”,“ipv4”:“127.0.0.1”,“port”:3306},“annotations”:[{“timestamp”:1458702548827000,“value”:“cs”},{“timestamp”:1458702548829000,“value”:“cr”}],“tags”:{“jdbc.query”:“selectzipkin_annotations.trace_id,zipkin_annotations.span_id,zipkin_annotations.a_key,zipkin_annotations.a_value,zipkin_annotations.a_type,zipkin_annotations.a_timestamp,zipkin_annotations.endpoint_ipv4,zipkin_annotations.endpoint_port,zipkin_annotations.endpoint_service_namefromzipkin_annotationswherezipkin_annotations.trace_idin(?)orderbyzipkin_annotations.a_timestampasc,zipkin_annotations.a_keyasc”,“sa”:“true”}}]

上面的数据是使用的 zipkin 官网 Data Model 中的示例数据, 只是将回车符全部去掉了, 因为使用 kafka 客户端发送消息, 一个回车符 代表一条消息, 这样发送到 zipkin 中是不完整的.

之后在 zipkin 页面中按 traceId 搜索, 即会看到和官网图示一样的结果

pinpoint 链路 kafka kafka链路追踪_elasticsearch_03


pinpoint 链路 kafka kafka链路追踪_pinpoint 链路 kafka_04


至此, 介绍完毕.

5. 补充

ES 中 浏览器查看数据, 没有装 head 插件, 可以使用 rest api 来了解一些ES 存储情况

  • 查看记录数: http://localhost:9200/_cat/count
  • 查看所有数据: http://localhost:9200/_search?pretty (数据多慎用)
  • 查看各索引数据量: http://localhost:9200/_cat/indices?pretty