Skip to content

Latest commit

 

History

History
34 lines (25 loc) · 1.37 KB

常见问题.md

File metadata and controls

34 lines (25 loc) · 1.37 KB

常见问题

1、kafka同一个key存在于不同的partition

存在2个业务同时写入的情况

2个可能原因

  • 当时发生了rebalance
  • 2个业务默认hash算法不一样
    • java kafka client默认的hash:crc32
    • sarama client : FNV-1a

补充: 从kafka源码看大量特性的逻辑是在客户端实现,比如题主遇到的key相同但是partion却不一样。 以java客户端为例,一共三大类partition计算方案:

  • record指定partition就使用指定的partition
  • 没有指定partition且没有指定Partitioner(partition选择器)
    • 指定key: 对key进行hash取模 详见: org.apache.kafka.clients.producer.internals.DefaultPartitioner
    • 没有指定key: 轮询
  • 自定义Partitioner(partition选择器)

2、kafka多语言客户端列表

https://cwiki.apache.org/confluence/display/KAFKA/Clients#Clients-HowTheKafkaProjectHandlesClients

核心业务只建议使用官方提供的java客户端

3、kafka背后的数据结构

  • 不用BTree。

    BTree操作复杂度是O(log N),被认为基本上等价于常量时间。但是对磁盘操作则不然,磁盘每次操作大概要10ms,并且每个磁盘在同一时刻只能做一个寻址,所以并行化非常受到限制。

  • appends to files

    all operations are O(1) and reads do not block writes or each other

  • ConcurrentSkipListMap