【启动kafka前,需要调整这个配置文件(/opt/kafka-2.1.0/config/server.properties)的一处ip地址】
因为每次虚拟机的ip地址可能会有所不同,这和所在网络有关,也可将ip固定,这样不需要调整配置文件
安装并使用
centos7安装kafka
1.解压
tar -xvf kafka_2.11-2.1.0.tgz
mv kafka_2.11-2.1.0 kafka-2.1.0
2.修改配置文件
cd /opt/kafka-2.1.0/config
【修改server.properties文件】
vim server.properties
修改内容如下:
broker.id=0
#端口号
port=9092
#单机可直接用localhost
host.name=localhost
listeners=PLAINTEXT://192.168.43.196:9092
#日志存放路径
log.dirs=/DATA/kafka/kafka_2.12-2.0.0/log
#zookeeper地址和端口,单机配置部署,localhost:2181
zookeeper.connect=localhost:2181
【修改zookeeper.properties文件】
vim zookeeper.properties
修改内容如下:
#zookeeper数据目录
dataDir=/opt/zookeeper-3.4.8/data
#zookeeper日志目录
dataLogDir=/opt/zookeeper-3.4.8/log
clientPort=2181
maxClientCnxns=100
tickTime=2000
initLimit=10
3.创建启动文件
vim kafkaStart.sh
内容如下:
#!/bin/bash
#启动zookeeper
/opt/kafka-2.1.0/bin/zookeeper-server-start.sh /opt/kafka-2.1.0/config/zookeeper.properties &
sleep 3 #默默等3秒后执行
#启动kafka
/opt/kafka-2.1.0/bin/kafka-server-start.sh /opt/kafka-2.1.0/config/server.properties &
4.启动文件赋予权限
chmod +x kafkaStart.sh
5.直接启动kafka的启动文件即可
cd bin
./kafkaStart.sh
6.命令行简单测试
#创建名字为test的topic
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
#查看topic列表
./kafka-topics.sh --list --zookeeper localhost:2181
#删除名字为test的topic
./kafka-topics.sh --delete --zookeeper localhost:2181 --topic test
#开启两个终端 (生产者)
./kafka-console-producer.sh --broker-list localhost:9092 --topic test
#消费者
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
安装kafka-tool客户端
傻瓜式安装,通过ip进行连接
java程序调用
生产者
pom.xml文件引入依赖
<!--kafka-->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
application.yml文件配置kafka信息
#kafka推送消息信息配置
kafka:
#url
url: 192.168.124.22:9092
#topic名称
topic: testKafka
#发生错误后,消息重发的次数
retries: 0
#Broker对producer即将发送来的数据采用何种确认方式
acks: 1
开发Bean对象,初始化kafka地址,以方便调用
- MetricsCallBack 回调方法(获取发送消息的结果)
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.producer.Callback;
import org.apache.kafka.clients.producer.RecordMetadata;
/**
* @Auther:
* @Date: 2022/3/27 10:53
* @Description:
*/
@Slf4j
public abstract class MetricsCallBack implements Callback {
private final long startTime;
private final String key;
private final String message;
/**
* 有参构造函数
* @param startTime 消息发送的起始时间
* @param key 消息键,可为null
* @param message 消息
*/
public MetricsCallBack(long startTime,String key,String message){
this.startTime=startTime;
this.key=key;
this.message=message;
}
@Override
public void onCompletion(RecordMetadata metadata, Exception exception) {
long cost=System.currentTimeMillis()-startTime;
if(metadata!=null){
onSendFinish(this.key,this.message,true,cost,metadata.topic(),metadata.partition(),metadata.offset(