命令行工具
消费组管理
查看消费组:
./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
查看消费组详细信息:
./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group groupid
查看消费组当前的状态:
./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group groupid --state
查看消费组内成员信息:
./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group groupid --members
删除消费组,如果有消费者在使用则会生效:
./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --delete --group groupid
消费位移管理
重置消费位移,前提是没有消费者在消费:
./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group groupid --all-topics --reset-offsets --to-earliest --execute
# --all-topics指定了所有主题
数据管道Connect
概述
Kafka是一个使用越来越广的消息系统,尤其是在大数据开发中(实时数据处理和分析)。为何集成其他系统和解耦应用,经常使用producer来发送消息到broker,并使用consumer来消费broker中的消息。kafka connect是到0.9版本才提供的并极大简化了其他系统与kafka的集成。kafka connect运用用户快速定义并实现各种connector,这些功能让大批量数据导入/导出kafka很方便。
在kafka connect中的重要的概念:
- 连接器:实现了connect API,决定需要运行多少个任务,按照任务来进行数据复制,从worker进程获取任务配置并将其传递下去。
- task:负责将数据移入或移出kafka。
- worker进程:相当于connector和任务的容器,用于负责管理连接器的配置、启动连接器和连接器任务,提供REST API。
- 转换器:kafka connect和其他存储系统直接发送或者接受数据之间转换数据。
独立模式-文件系统
场景:
以下示例使用到了两个connector,将文件source.txt中的内容通过Source连接器写入kafka主题中,然后将内容写入source.sink.txt中。
- FileStreamSource:从source.txt中读取并发布到broker中。
- FileStreamSink:从Broker中读取数据并写入到source.sink.txt文件中。
配置worker进程(connect-standalone.properties):
//kafka集群连接的地址
bootstrap.servers=localhost:9092
//格式转化类
key.converter=org.apache.kafka.connect.json.JsonConverter
value.converter=org.apache.kafka.connect.json.JsonConverter
//json消息中是否包含schema
key.converter.schemas.enable=true
value.converter.schemas.enable=true
//保存偏移量的文件路径
offset.storage.file.filename=/tmp/connect.offsets
//设定提交偏移量的频率
offset.flush.interval.ms=10000
配置source(connect-file-source.properties)
//配置连接器的名称
name=local-file-source
//连接器的全限定名称,设置类名称也是可以的
connector.class=FileStreamSource
//task数量
tasks.max=1
//数据源的文件路径
file=/tmp/source.txt
//主题名称
topic=mytopic2
配置sink(connect-file-sink.properties)
name=local-file-sink
connector.class=FileStreamSink
tasks.max=1
file=/tmp/source.sink.txt
topic=mytopic2
启动source连接器:
./connect-standalone.sh ../config/connect-standalone.properties ../config/connect-file-source.properties
启动sink连接器:
./connect-standalone.sh ../config/connect-standalone.properties ../config/connect-file-sink.properties
source写入文本:
echo "hello" >> /tmp/source.txt
查看sink文件:
cat /tmp/source.sink.txt
spring boot整合kafka
添加pom.xml
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
添加application.properties:
spring.kafka.producer.bootstrap-servers=localhost:9092
spring.kafka.consumer.bootstrap-servers=localhost:9092
消息的发送:
private KafkaTemplate template;
private static final String topic = "mytopic3";
@GetMapping("/send/{input}")
public String sendToKafka(@PathVariable String input) {
this.template.send(topic,input);
return "send success";
}
消息的接收:
@KafkaListener(id="",topics=topic,groupId="groupid")
public void Listener(String input) {
sout(input);
}