0 声望

这家伙太懒,什么都没留下

个人动态
  • 半兽人 回复 请教下kafka消费速度问题 中 :

    你在多启动一个消费者,也设置concurrency=10),确保有4个消费者同时在,在观察一下分区情况,另外,你消息收到就打印,不要做任何处理,观察下延迟情况,告诉我结果。

    4年前
  • 回复 半兽人请教下kafka消费速度问题 中 :

    第2点经过了一下测试,3台服务器(4核16G),kafka单节点,30个分区,每台机器(concurrency=10)负责的分区个数均为10。目前偶尔仍会有1-2秒的消费延迟,是否意味着需要增加kafka主题的分区个数来应对高并发的时刻?(因为分区新建后不可删除,所以先请教帮忙分析下,谢谢)

    4年前
  • 回复 半兽人请教下kafka消费速度问题 中 :

    1.明白了谢谢。
    2.后续进行下测试看看。
    谢谢。

    4年前
  • 半兽人 回复 请教下kafka消费速度问题 中 :

    1、强制(kill -9)或程序异常崩溃会丢消息的,正常停止应用不会丢消息的,几乎是不会出现崩溃情况(测试通过后,不要再随意调整线程数什么的了,很容易造成OOM,引起崩溃)。手动提交offset也可以解决,但是效率会大打折扣,崩溃时会造成重复消费的问题了(该消息处理了,但是在提交offset的时候,应用崩溃了)。 https://www.orchome.com/1056 这个例子是同步提交offset的,崩溃时最多丢1笔消息,线程运行5、6年了,没出过问题。

    2、springboot这个太久我忘了,不过concurrency=1你可以做个测试,设置成30个(对应你的分区数),那么你在启动一个新的应用程序时,如果它一直拿不到消息,则说明concurrency是对应的消费者分区,启动了30个消费者,占满了30个分区,如果新启动的消费者进程拿到了消息,则说明concurrency对应的是消息处理线程,什么意思呢,就是消费者是批量获取消息的,比如一次获取2000条消息,拿到之后,丢给消息处理线程,也就是说有30个消息处理程序同时在处理这2000条消息。

    也可以通过下面命令查看下消费者客户端占用情况:

    ## 显示某个消费组的消费详情(0.9版本 - 0.10.1.0 之前)
    bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group my-group
    
    4年前
  • 回复 半兽人请教下kafka消费速度问题 中 :

    特别感谢您的回复。
    1.关于您提到的由于异步没有阻塞导致业务丢失的风险,解决方式只能是增加机器,以保证有足够的系统资源支撑所有异步任务吧?(这样的情况下,如果有一台忽然重启,是否也有这样的风险?有没有较好地应对这样异步任务的方式呢?还是说要保证业务不丢失,需要取消异步,横向扩展以保证处理速度?)
    2.关于第3点的消费者集群问题,由于我描述的不清楚,还要请教一下,30个分区,如果启动了3个节点的消费者程序,每个节点的分区是怎样分配的?(如果是默认配置concurrency=1,应该是每个节点分配10个分区吧,这样如果想要用3个节点保证并发量,是否应该设置每个节点的concurrency=10?)
    谢谢。

    4年前
  • 4年前