-Xmx16G -Xms4G
java.lang.OutOfMemoryError: Java heap space
[2019-11-1200:07:05,095] INFO Client session timed out, have not heard from server in6417ms for sessionid 0x56ccc6b94d50008, closing socket connection and attempting reconnect (org.apache.zookeeper.ClientCnxn)
[2019-11-1200:07:04,035] ERRORErrorwhile accepting connection (kafka.network.Acceptor)
java.lang.OutOfMemoryError: Java heap space
看看该topic的分区有没有副本,贴一下运行情况。
## 查询集群描述 bin/kafka-topics.sh --describe --zookeeper
因为是线上环境无法贴图的,对应的topic都没有副本且宕机的kafka通过jps查看是有对应进程,但已经不提供服务了
对应错误,kafka内存设置为
-Xmx16G -Xms4G java.lang.OutOfMemoryError: Java heap space [2019-11-12 00:07:05,095] INFO Client session timed out, have not heard from server in 6417ms for sessionid 0x56ccc6b94d50008, closing socket connection and attempting reconnect (org.apache.zookeeper.ClientCnxn) [2019-11-12 00:07:04,035] ERROR Error while accepting connection (kafka.network.Acceptor) java.lang.OutOfMemoryError: Java heap space
这个是内存溢出了,看样子你的物理机没有足够的内存支撑16G
物理机256内存且只跑了一个kafka。
想问一下,我的印象里,kafka集群内挂掉一台还是可以正常消费数据的,现在是只要挂掉一台就没办法消费了,有什么解决的方法吗?
继续调大jvm,另外,你得看下系统日志,是否有相关kill内存溢出的日志。
kafka的耐用性是靠分区保障的,挂掉一台,如果
__consumer_offset__
确认没问题,并且该topic的分区在别的机器也有副本并选成leader,是不会有问题的。 其实你得提供给我描述
信息,生产你可以提供伪码。我模拟了一下挂掉一台以后的情况,消息可以正常写入,旧的消费者也可以消费,但新的消费者无论在 消费的ip列表里写不写宕机的那台ip都无法通过9092消费了
Topic:mytest PartitionCount:3 ReplicationFactor:1 Configs: Topic: mytest Partition: 0 Leader: 2 Replicas: 2 Isr: 2 Topic: mytest Partition: 1 Leader: 3 Replicas: 3 Isr: 3 Topic: mytest Partition: 2 Leader: -1 Replicas: 1 Isr: 1 Topic:__consumer_offsets PartitionCount:50 ReplicationFactor:3 Configs:segment.bytes=104857600,cleanup.policy=compact,compression.type=producer Topic: __consumer_offsets Partition: 0 Leader: 3 Replicas: 3,2,1 Isr: 2,3 Topic: __consumer_offsets Partition: 1 Leader: 3 Replicas: 1,3,2 Isr: 2,3 Topic: __consumer_offsets Partition: 2 Leader: 2 Replicas: 2,1,3 Isr: 2,3 Topic: __consumer_offsets Partition: 3 Leader: 3 Replicas: 3,1,2 Isr: 2,3 Topic: __consumer_offsets Partition: 4 Leader: 2 Replicas: 1,2,3 Isr: 2,3 Topic: __consumer_offsets Partition: 5 Leader: 2 Replicas: 2,3,1 Isr: 2,3 Topic: __consumer_offsets Partition: 6 Leader: 3 Replicas: 3,2,1 Isr: 2,3
consumer_offsets之后的信息与现在的类似
mytest,没有副本呀。
是的,线上的也没有副本,他不应该从分区0和分区1读取消息吗?
为什么不加副本呢?而且还是生产。
kafka有个保护策略,一半以上服务不可用,就会停止了。
文章在哪我没时间帮你找,晚会我找找。
我们单个topic数据量小的也得二十多万,长json格式做副本会占用太多资源吧
主备是最少配置了,也是性能和耐用性都相对最好的了。
嗯,还有一个问题,比如我三个分区没有副本宕掉一个节点,在新的消费者加入时,不应该在消费的时候就不去加入宕掉那个分区吗?
[Consumer clientId=consumer-1, groupId=test2] Setting newly assigned partitions [mytest-0, mytest-1, mytest-2]
不应该只是加入正常提供服务的那两个分区
超过半数了,kafka专栏里有篇文章解释过。文章太多了 得扒一扒。
我大概找了找又试了一下,我用四台机器作为集群,挂一台还是没办法消费,他还是会使消费者加入所有的分区,导致无法消费
你的答案