我们一直在尝试在 AWS Linux 机器上建立一个生产级别的 Kafka 集群,直到现在我们都没有成功。
卡夫卡版本:2.1.0
机器:
5 r5.xlarge machines for 5 Kafka brokers.
3 t2.medium zookeeper nodes
1 t2.medium node for schema-registry and related tools. (a Single instance of each)
1 m5.xlarge machine for Debezium.
默认代理配置:
num.partitions=15
min.insync.replicas=1
group.max.session.timeout.ms=2000000
log.cleanup.policy=compact
default.replication.factor=3
zookeeper.session.timeout.ms=30000
我们的问题主要与海量数据有关。我们正在尝试使用 debezium 将我们现有的表转移到 kafka 主题中。其中许多表非常庞大,超过 50000000 行。
到目前为止,我们已经尝试了很多事情,但我们的集群每次都会失败,原因有一个或多个。
错误计划任务“isr-expiration”(kafka.utils.KafkaScheduler)org.apache.zookeeper.KeeperException$SessionExpiredException 中未捕获的异常:KeeperErrorCode = org.apache 上 /brokers/topics/__consumer_offsets/partitions/0/state 的会话已过期。 zookeeper.KeeperException.create(KeeperException.java:130) 在 org.apache.zookeeper.KeeperException.create(KeeperException.java:54)..
错误2:
] INFO [Partition xxx.public.driver_operation-14 broker=3] 缓存的 zkVersion [21] 不等于 zookeeper 中的,跳过更新 ISR (kafka.cluster.Partition) [2018-12-12 14:07:26,551] INFO [分区 xxx.public.hub-14 broker=3] 将 ISR 从 1,3 缩小到 3 (kafka.cluster.Partition) [2018-12-12 14:07:26,556] INFO [分区 xxx.public.hub-14 broker=3]缓存的zkVersion [3]不等于zookeeper中的,跳过更新ISR(kafka.cluster.Partition)[2018-12-12 14:07:26,556] INFO [Partition xxx.public.field_data_12_2018-7 broker= 3] 将 ISR 从 1,3 缩小到 3 (kafka.cluster.Partition)
错误 3:
isolationLevel=READ_UNCOMMITTED, toForget=, metadata=(sessionId=888665879, epoch=INITIAL)) (kafka.server.ReplicaFetcherThread) java.io.IOException: 在 org.apache.kafka.clients 读取响应之前,与 3 的连接已断开.NetworkClientUtils.sendAndReceive(NetworkClientUtils.java:97)
还有一些错误:
- 代理之间经常断开连接,这可能是 ISR 不断收缩和扩展而没有自动恢复的原因。
- 架构注册表超时。我不知道模式注册表是如何受到影响的。我没有看到该服务器上的负载过多。我错过了什么吗?我应该为架构注册表的多个实例使用负载均衡器作为故障转移吗?. __schemas 主题中只有 28 条消息。确切的错误消息是 RestClientException: Register operation timed out。错误代码:50002
有时消息传输率超过 100000 条消息/秒,有时它下降到 2000 条消息/秒?消息大小可能会导致这种情况?
为了解决上面的一些问题,我们增加了brokers的数量并增加了zookeeper.session.timeout.ms=30000,但我不确定它是否真的解决了我们的问题,如果解决了,如何解决?
我有几个问题:
- 我们的集群是否足以处理这么多数据。
- 有什么明显的我们遗漏的吗?
- 如何在进入生产级别之前对我的设置进行负载测试?
- 什么可能导致代理和模式注册表之间的会话超时。
- 处理模式注册表问题的最佳方法。
我们的一位经纪人的网络负载。
随时询问更多信息。