kafka

来源:互联网 发布:明道软件电脑版下载 编辑:程序博客网 时间:2024/05/29 17:41

(1)*** 所以,在写入时,还是需要动态指定下partition的分区号,有可能出现直接使用缓存里的分区号,造成消息分布不均匀,I think-2016-12-19

详见点击打开链接

可以看出,Kafka几乎就是随机找一个分区发送无key的消息,然后把这个分区号加入到缓存中以备后面直接使用——当然了,Kafka本身也会清空该缓存(默认每10分钟或每次请求topic元数据时)

if(key == null) {  // 如果没有指定key        val id = sendPartitionPerTopicCache.get(topic)  // 先看看Kafka有没有缓存的现成的分区Id        id match {          case Some(partitionId) =>              partitionId  // 如果有的话直接使用这个分区Id就好了          case None => // 如果没有的话,            val availablePartitions = topicPartitionList.filter(_.leaderBrokerIdOpt.isDefined)  //找出所有可用分区的leader所在的broker            if (availablePartitions.isEmpty)              throw new LeaderNotAvailableException("No leader for any partition in topic " + topic)            val index = Utils.abs(Random.nextInt) % availablePartitions.size  // 从中随机挑一个            val partitionId = availablePartitions(index).partitionId            sendPartitionPerTopicCache.put(topic, partitionId) // 更新缓存以备下一次直接使用            partitionId        }      }

---Windows 上安装kafka遇到的问题:

1-安装好zookeeper,启动kafka的时候,报错如下:

D:\Program Files\kafka-0.10.1.1-src>.\bin\windows\kafka-server-start.bat .\config\server.properties
'wmic' 不是内部或外部命令,也不是可运行的程序或批处理文件。


(每次更改环境变量,一定重新打开cmd窗口,重新编译)

解决:

1-环境变量中加入(wmic的路径):C:\Windows\System32\wbem

2-修改kafka的解压路径,不要上级目录中带空格啊!!!(敲黑板,这是重点)


然后,以上解决后,或许又会报错:

此时不应有 \Java\jdk1.8.0_101\lib\dt.jar


excuse me??参考各种,解决如下:

环境变量中的CLASSPATH,删除%JAVA_HOME%\lib\dt.jar;(暂未知这是个啥)


然后,又出现

此时不应有 \Java\jdk1.8.0_101\lib\tools.jar.。

解决:

环境变量中的CLASSPATH,删除%JAVA_HOME%\lib\tools.jar.;


因为我还装过scala,所以又报错如下:

此时不应有 \scala\bin

解决:

环境变量中的CLASSPATH,删除%SCALA_HOME%\bin;%SCALA_HOME%\lib\dt.jar;%SCALA_HOME%\lib\tools.jar.;


然鹅并没有完:

问题:

命令语法不正确。
错误: 找不到或无法加载主类 kafka.Kafka


我要骂人了。。。


原因最终竟然是,应该下载二进制包啊!

kafka包下载地址:http://kafka.apache.org/downloads.html

注意,应该下载的是Binary downloads!!!(还未知道两者的具体区分20170111)


反正一切就酱紫解决了,上面遇到的问题可能还是会有,

补充:

拷贝%JAVA_HOME%\jdk路径\jre\bin\server
%JAVA_HOME%\jre路径\bin
java_home的路径配置的是jre的路径;path中则相应改成%jave_home%\bin
原来配置的是jdk的路径

0 0