Apcahe-druid 26.0.0下载链接
1. 上传到需要部署的服务器目录上 -》 解压
2. cd 到自己上传文件的目录进行解压
cd /home/pi/druid
tar -zxvf apache-druid-26.0.0-bin.tar.gz
3. 解压后进入到bin目录
自行安装好Java环境,并且防火墙和服务器安全组开放
Coordinator 8081 管理集群上的数据可用性
Historical 8083 存储历史查询到的数据
Broker 8082 处理来自外部客户端的查询请求
Realtime 8084
Overlord 8090 控制数据摄取工作负载的分配
MiddleManager 8091 负责摄取数据
Router 8888 可以将请求路由到Brokers, Coordinators, and Overlord
ZooKeeper 2181
Kafka 9092
4、 使用命令行后台启动,启动成功后用服务器ip:8888端口访问页面,查看是否正常
nohup ./start-micro-quickstart &
5、安装docker,使用docker安装kafka
可以根据这个文章来学习安装 最详细的ubuntu 安装 docker教程_ubuntu docker_软件测试大空翼的博客-CSDN博客
执行运行命令,docker没有容器会直接拉取,命令的 XXXX 改为自己的服务器公网ip
docker run -id --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -eKAFKA_ZOOKEEPER_CONNECT=XXXX:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://XXXX:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka
执行docker ps命令,检查kafka是否成功启动
执行成功后,进入docker容器内部后
docker exec -it kafka /bin/bash
cd /opt/kafka_2.13-2.8.1/bin
创建一个队列 XXXX改为自己服务器ip
./kafka-topics.sh --create --zookeeper XXXX:2181 --replication-factor 1 --partitions 1 --topic vehicleTrajectory
./kafka-topics.sh -list -zookeeper XXXX:2181 #查看是否存在刚才创建的队列
测试一下kafka的发送和接收 1.执行启动客户端接收的命令接收数据
./kafka-console-consumer.sh --bootstrap-server XXXX:9092 --topic vehicleTrajectory --from-beginning
2.新建一个窗口,连接刚才部署的服务器,进入到kafka容器内,进入到/opt/kafka_2.13-2.8.1/bin目录,执行发送端发送的命令进行发送消息
./kafka-console-producer.sh --broker-list XXXX:9092 --topic vehicleTrajectory
通过测试,发送后,客户端可以顺利接收到,证明kafka正常使用
6、druid连接Kafka配置,定时通过Kafka队列拉取数据,Java只需要连接kafka把消息发送到kafka队列上
druid连接kafka配置文件,dimensions 需要根据自身需要做调整
{
"type": "kafka",
"dataSchema": {
"dataSource": "vehicleTrajectory",
"parser": {
"tyep": "string",
"parseSpec": {
"format": "json",
"timestampSpec": {
"column": "createTime",
"format": "iso"
},
"dimensionsSpec": {
"dimensions": [
"hdop",
"alt",
"sog",
"cog",
"lat",
"lon",
"status",
"cameraId",
"startTime",
"address"
]
}
}
},
"metricsSpec": [],
"granularitySpec": {
"type": "uniform",
"segmentGranularity": "week",
"queryGranularity": "minute",
"rollup": true
}
},
"tuningConfig": {
"type": "kafka",
"reportParseExceptions": false
},
"ioConfig": {
"topic": "vehicleTrajectory",
"replicas": 1,
"taskDuration": "PT10M",
"completionTimeout": "PT20M",
"consumerProperties": {
"bootstrap.servers": "XXXX:9092"
}
}
}
提交链接后,可以看到druid拉取任务配置
7、springboot链接kafka进行配置链接
kafka maven依赖
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
application.yml 配置
spring:
kafka:
bootstrap-servers: XXXX:9092
listener:
concurrency: 5
producer:
retries: 3
batch-size: 10000
buffer-memory: 33554432
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
consumer:
group-id: test-consumer-group
Java 封装工具类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
/**
* 用于操作kafka
*/
@Component
public class KafkaSender {
//kafka队列名称
public final static String MSG_TOPIC = "vehicleTrajectory";
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
private static KafkaTemplate<String, String> template;
@PostConstruct
public void init() {
template = kafkaTemplate;
}
/**
* 向kafka队列发送消息
*/
public static boolean send(String topic, String message) {
try {
template.send(topic, message);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}
测试请求 vehicleTrajectory 根据自身创建的实体类和druid连接kafka配置文件中的dimensions 字段对应
KafkaSender.send(KafkaSender.MSG_TOPIC, JSONUtil.toJsonStr(vehicleTrajectory));
log.info("推送位置信息到kafka:{}" + JSONUtil.toJsonStr(vehicleTrajectory));
测试成功后的数据在druid上