linux操作kafka
①下载kafka压缩包
②上传到linux然后使用命令解压
tar -zxvf kafka_2.10-0.10.0.1.tgz
③修改kafka的配置(进入到kafka文件的config目录下)
vim server.properties
broker.id=0//This must be set to a unique integer for each broker
advertised.listeners=PLAINTEXT://192.168.0.108:9092:远程连接需要配置下(0.9.0.1版本没有这个问题)
log.dirs=/usr/local/kafka_2.11-0.9.0.1/kafka-logs//默认的是不会持久化存储的,这里必须更改下
zookeeper.connect=//zookeeper的连接地址:根据实际进行配置
④修改kafka内置zookeeper的配置(进入到kafka文件的config目录下)
vim zookeeper.properties
dataDir=/usr/local/kafka/zookeeper #zookeeper数据目录
dataLogDir=/usr/local/kafka/log/zookeeper #zookeeper日志目录
clientPort=2181
maxClientCnxns=100
tickTime=2000
initLimit=10
syncLimit=5
(这里每启动一个都是一个独立窗口)
⑤开启zookeeper
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
(这个是后台运行zookeeper的命令)
⑥开启kafka
bin/kafka-server-start.sh config/server.properties
⑦创建topic主题(这里的主题名字是test)
bin/kafka-topics.sh --create --topic test --bootstrap-server 192.168.83.128:9092 -partitions 3 -replication-factor 1
⑧启动生产者连接主题
bin/kafka-console-producer.sh --broker-list 192.168.83.128:9092 --topic test
⑨启动消费者连接主题
bin/kafka-console-consumer.sh --bootstrap-server 192.168.83.128:9092 --topic test
然后就可以进行发送消息了
springboot集成kafka
(本地记得启动zookeeper和kafka,windows可以通过cmd来启动)
目录结构:
依赖:
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.4.2.RELEASE</version>
</dependency>
配置:
kafka:
bootstrap-servers: 127.0.0.1:9092
consumer:
enable-auto-commit: true
group-id: test
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
topic: springboot-kafka
生产者:
@Slf4j
@Component
public class Producer {
@Autowired
private KafkaTemplate kafkaTemplate;
@Value("${spring.kafka.topic}") //引入application.properties中的数据
private String topics;
public void send(String jsonString) {
log.info("待发送的消息:{}", jsonString);
kafkaTemplate.send(topics, jsonString);
}
}
消费者:
@Slf4j
@Component
public class Consumer {
@KafkaListener(topics = "${spring.kafka.topic}")
public void receiver(ConsumerRecord record) {
log.info("接收到的数据:topic={},message={}", record.topic(), record.value());
}
}
控制器:
@RestController
@RequestMapping("/kafka")
public class KafkaController {
@Autowired
private Producer producer;
@RequestMapping("/send")
public void sendMsg() {
for (int i = 0; i < 10; i++) {
producer.send("发送第" + (i + 1) + "条信息!");
}
}
}
效果: