kafka消费太慢
首先加多个patiction,多个消费组
拉去多个,多个消费者消费
后续还是不行 以为是线程池被用完了,就单独起一个线程还是不行!!!
后续就用jstack看线程状态 jstack pid > stack.txt dump线程状态 https://blog.csdn.net/liwenxia626/article/details/80791704
WAITING (parking) bstractQueuedSynchronizer$ConditionObject)
是数据库的连接池被占满了,所以加大连接池 datasource。hikari.maximum-pool-size: 100
kafka
同一个Topic对应很多的分区,这topic消息,可以被很多组消费者消费,但是同一个topic下的某个分区,只能被一个消费者组当中的一个消费者消费!!!
分区0,被消费者1消费,同时还被消费者2消费 --> 这个就是错的
一个消费者组的一个消费者,可以消费一个topic下的多个分区
同一个topic下的某个分区,可以被多个消费者组,消费者消息
auto.offset.reset
earliest 当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费
latest 当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据
none topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常
enable.auto.commit 的默认值是 true;就是默认采用自动提交的机制。 问题就是消费失败也会提交,造成数据丢失
enable.auto.commit=TRUE,则同一个消费者重启之后不会重复消费之前消费过的消息
auto.commit.interval.ms 的默认值是 5000,单位是毫秒。
max.poll.interval.ms 默认值是5分钟 如果在两次poll操作之间,超过了这个时间,那么就会认为这个consumer处理能力太弱了,会被踢出消费组,分区分配给别人去消费
rebalance.timeout = max.poll.interval.ms
max.poll.records=1 默认500
指定消费区
consumer.assign(Arrays.asList(new TopicPartition(“kafka.wshare.match_meta_data.topic”,0))
session.timeout.ms: kafka多长时间感知不到一个consumer就认为他故障了,默认是10秒 心跳
group.id 它们共享一个公共的group ID,组ID是一个字符串,用来唯一标志一个消费者组
多个分区 多线程消费 消费时间太长挂掉了