kafka windows linux 下搭建 和java springboot 连接

基础结构和术语

https://www.cnblogs.com/frankdeng/p/9310684.html

单机版

https://blog.csdn.net/cold___play/article/details/132398946

win下的集群搭建 当然。。是伪集群...

ZK所有的服务器都指向本机,kafka所有的服务器都指向本机..

版本

linux:centos7
kafka-server :2.12-2.50
kafka-client:2.3.1
zookeeper 3.4.6

先启动
zookeeper
再启动
kafka

WIN下的启动参数
zookeeper-server-start.bat ../../config/zookeeper.properties
kafka-server-start.bat ../../config/server.properties

遇到的问题

Windows CMD命令行解释器【输入行太长。 命令语法不正确】

  • 解决办法
    使用较短的文件夹和文件的名称
    减少文件夹树的深度

参考的地址中说的配置port和host是kafka的老版本了

新版本配置listeners就可以了。具体可以百度一下

Linux 下的搭建

配置

server.properties

下面的两个参数都要设置成外网的,才能正常使用,不然客户端找不到kafka,谢特

listeners=PLAINTEXT://192.168.200.24:9092
advertised.listeners=PLAINTEXT://192.168.200.24:9092

启动指令

bin/zookeeper-server-start.sh -daemon config/zookeeper.properties

bin/kafka-server-start.sh -daemon config/server.properties

维护

JAVA连接

奇怪的是JAVA中的连接需要用kafka的端口而不是zookeeper的端口,但是用kafka的客户端UI管理工具又可以用zookeeper的端口去连接。。
springboot 目前的配置

重置offset

三种方法
1、新建一个组消费
2、JAVA指定消费的offset

 @KafkaListener(groupId = "topic_group_test",topicPartitions = {
            @TopicPartition(topic = "topic_test",partitionOffsets = @PartitionOffset(partition = "0", initialOffset = "9830"))
    })
    public void topicConsumer(ConsumerRecord<?, ?> record, Acknowledgment ack, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) {
        Optional message = Optional.ofNullable(record.value());
        if (message.isPresent()) {
            Object msg = message.get();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            log.info("Kafka消费者topic_group_test:成功获取到数据: Topic = {}, Message = {}", topic, msg);
            //TODO 单条数据处理.....
            ack.acknowledge();
        }
    }

3、kafka服务器操作

1、## 详情通过help 命令查看
## all topic 重置到最早消费进度
kafka-consumer-groups.sh --bootstrap-server 10.202.13.27:9092 --group cjw --reset-offsets --all-topics --to-earliest --execute
##指定主题
kafka-consumer-groups.sh --bootstrap-server 10.202.13.27:9092 --group cjw --reset-offsets --topic cjw-test --to-earliest --execute
##指定偏移量
kafka-consumer-groups.sh --bootstrap-server 10.202.13.27:9092 --group cjw --reset-offsets --topic cjw-test --to-offset 2 --execute
##指定主题、分区、消费偏移
./kafka-consumer-groups.sh --bootstrap-server 192.168.200.24:9092 --group g1 --reset-offsets --topic sys_log:0 --to-offset 1 --execute

2、Error: Assignments can only be reset if the group ‘logstash_kafka_group’ is inactive, but the current state is Stable
简单的说就是,相同的 group 有其他的 topic 正在使用和消费,那么这个 group 是出于 active 状态。出于 active 状态的 group 的任何 topic 的 offset 是不能够被 reset 的。

3 停止 logstash消费任务,或者其他消费任务

4、重新执行
9reset_kafka_lag.sh logstash_kafka_group log-a
Error: Assignments can only be reset if the group ‘logstash_kafka_group’ is inactive, but the current state is PreparingRebalance.

GROUP TOPIC PARTITION NEW-OFFSET
logstash_kafka_group log-group 0 923424362
logstash_kafka_group log-group 1 213391942
logstash_kafka_group log-group 2 1034276461
[root@log-kafka7 ~]# sh log-group.sh

5、清理
Consumer group ‘logstash_kafka_group’ has no active members.
logstash_kafka_group log-group 1 213391942 213393406 1464 – – –
logstash_kafka_group log-group 0 923424362 923433192 8830 – – –
logstash_kafka_group log-group 2 1034276461 1034284424 7963 – – –

6、cat 9reset_kafka_lag.sh
export JAVA_HOME=/jesong/jdk1.8.0_251
export PATH=$PATH:$JAVA_HOME/bin

if [ -z $2 ];then
echo Usage $0 groupname
exit 0;
fi
group=$1
topic=$2

IP=$(ifconfig eth0|grep inet|awk ‘{print $2}’|head -1)

cd /jesong/kafka_2.13-2.6.0
./bin/kafka-consumer-groups.sh –bootstrap-server ${IP}:9092 \
–reset-offsets \
–group ${group} \
–topic ${topic} \
–to-latest \
–execute
#–to-earliest \

kafka 消息堆积慢消费问题

https://blog.csdn.net/qq_16681169/article/details/101081656

kafka系列——kafka生产中消费速度慢的问题

https://blog.csdn.net/qq_40384985/article/details/90675986

kafka指定offset进行消费,做开发测试是非常方便

 @KafkaListener(groupId = "g1",topicPartitions = {
             @TopicPartition(topic = "sys_log",partitionOffsets = @PartitionOffset(partition = "0", initialOffset = "0"))
 })

kafka UI管理工具

EFAK

offsetExploder

springboot 连接

pom.xml

   <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka_2.12</artifactId>
            <version>2.5.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.kafka</groupId>
                    <artifactId>kafka-clients</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>

yml

  kafka:
    consumer:
      bootstrap-servers: 127.0.0.1:9092,127.0.0.1:9093,127.0.0.1:9094
      enable-auto-commit: true
      group-id: ag-radar
      auto-offset-reset: latest

参考:
https://www.cnblogs.com/lentoo/p/7785004.html

posted @ 2022-02-19 17:59  方东信  阅读(214)  评论(0编辑  收藏  举报