docker 安装kafka、zookeeper
docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper
docker exec -it 容器id bash
cd /opt/kafka_2.13-2.8.1/bin
docker run -d --name kafka \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=192.168.1.117:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.117:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka
./kafka-topics.sh --create --zookeeper 192.168.1.117:2181 --replication-factor 1 --partitions 1 --topic test1
./kafka-topics.sh --zookeeper 192.168.1.117:2181 --list
./kafka-console-producer.sh --bootstrap-server 192.168.1.117:9092 --topic test1
./kafka-console-consumer.sh --bootstrap-server 192.168.1.117:9092 --topic test1 --from-beginning
Springboot集成kafka
yaml配置
server:
port: 7889
spring:
kafka:
bootstrap-servers: 192.168.1.117:9092
listener:
missingTopicsFatal: false
pom配置
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
生产者 & 消费者
@RestController
public class KafkaController {
@Autowired
private KafkaTemplate<String, Object> kafkaTemplate;
@GetMapping("/kafka/{message}")
public void sendMessage(@PathVariable("message") String normalMessage) {
kafkaTemplate.send("test2", normalMessage);
}
}
@Slf4j
@Component
public class KafkaConsumer {
/**
* 消费监听
*/
@KafkaListener(groupId = "consumer1", topics = "test2")
public void onMessage1(String body){
log.info("消息内容: {}", body);
}
}