windows kafka 基本命令
在windows kafka 安装目录下执行
1 启动 zookeeper
bin\windows\zookeeper-server-start.bat config\zookeeper.properties
2 启动kafka
bin\windows\kafka-server-start.bat config\server.properties
3 创建topic
bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic yangt
4 查看topic
bin\windows\kafka-topics.bat --list --zookeeper localhost:2181
5 查看消费情况
bin\windows\kafka-consumer-groups.bat --bootstrap-server localhost:9092 --describe --group test-consumer-group
spring 集成 kafka
bootstrap.yml 配置
kafka:
bootstrap-servers: 127.0.0.1:9092
consumer:
group-id: test-consumer-group
enable-auto-commit: false # 提交模式 false是手动 true是自动
auto-commit-interval: 100ms
properties:
session.timeout.ms: 15000
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
auto-offset-reset: earliest
listener:
# listener类型
# single | batch
type: single
# 已消费offset提交模式(仅在enable-auto-commit=false时才需明确指定)
# 单记录 | 批量 | 超时 | 超过消费数量 | 超时或超过数量 | 手动提交(ack)后同BATCH | 手动立即提交
# RECORD | BATCH | TIME | COUNT | COUNT_TIME | MANUAL | MANUAL_IMMEDIATE
# https://docs.spring.io/spring-kafka/docs/current/reference/html/#committing-offsets
ack-mode: MANUAL
producer:
retries: 0 #若设置大于0的值,客户端会将发送失败的记录重新发送
batch-size: 16384 #当将多个记录被发送到同一个分区时, Producer 将尝试将记录组合到更少的请求中。这有助于提升客户端和服务器端的性能。这个配置控制一个批次的默认大小(以字节为单位)。16384是缺省的配置
buffer-memory: 33554432 #Producer 用来缓冲等待被发送到服务器的记录的总字节数,33554432是缺省配置
key-serializer: org.apache.kafka.common.serialization.StringSerializer #关键字的序列化类
value-serializer: org.apache.kafka.common.serialization.StringSerializer #值的序列化类
消费者代码
@Component
public class KafkaConsumerListener {
// 加个注解即可实现监听消费
@KafkaListener(topics = "yangt")
public void receive(String message, Acknowledgment ack) {
System.out.println("我是消费者,收到了来自生产者发送的消息:" + message);
ack.acknowledge();
}
}
生产者代码
此处只是测试
@Controller
@RequestMapping("/kfk")
public class ProducerController {
@Autowired
KafkaTemplate<String, String> kafka;
@RequestMapping("/register")
@ResponseBody
public String register(String talk) {
System.out.println("我是生产者我要发送消息:" + talk);
kafka.send("yangt", talk);
//kafka.send(String topic, @Nullable V data) {
return "OK";
}
}