spark kafka example apache-spark apache-kafka spark-streaming

apache-spark - spark kafka streaming example



Chispa: procesando mĂșltiples temas kafka en paralelo (2)

Creo que la solución correcta depende de su caso de uso.

Si su lógica de procesamiento es la misma para los datos de todos los temas, entonces, sin duda, este es un mejor enfoque.

Si la lógica de procesamiento es diferente, supongo que obtiene un solo RDD de todos los temas y tiene que crear una pairedrdd para cada lógica de procesamiento y manejarlo por separado. El problema es que esto crea una especie de agrupación para procesamiento y la velocidad de procesamiento general será determinada por el tema que necesite más tiempo para procesar. Por lo tanto, los temas con menos datos deben esperar hasta que se procesen los datos de todos los temas. Una ventaja es que si se trata de datos de series temporales, entonces el procesamiento se realiza en conjunto, lo que podría ser bueno.

Otra ventaja de ejecutar trabajos independientes es que obtiene un mejor control y puede ajustar sus recursos compartidos. Por ejemplo, a los trabajos cuyo tema de proceso con alto rendimiento se le puede asignar una CPU / memoria más alta.

Estoy usando spark 1.5.2 . Necesito ejecutar un trabajo de transmisión de chispas con kafka como fuente de transmisión. Necesito leer de varios temas dentro de kafka y procesar cada tema de manera diferente.

  1. ¿Es una buena idea hacer esto en el mismo trabajo? Si es así, ¿debo crear una secuencia única con varias particiones o una secuencia diferente para cada tema?
  2. Estoy usando Kafka Direct Steam. Por lo que sé, spark lanza receptores de larga duración para cada partición. Tengo un grupo relativamente pequeño, 6 nodos con 4 núcleos cada uno. Si tengo muchos temas y particiones en cada tema, ¿se vería afectada la eficiencia ya que la mayoría de los ejecutores están ocupados con receptores de larga duración? Por favor corrígeme si mi entendimiento es incorrecto aquí

Hice las siguientes observaciones, en caso de que sea útil para alguien:

  1. En el flujo directo de kafka, los receptores no se ejecutan como tareas de larga ejecución. Al comienzo de cada inerval de lote, primero se leen los datos desde kafka en los ejecutores. Una vez leído, la parte de procesamiento se hace cargo.
  2. Si creamos una única secuencia con varios temas, los temas se leen uno tras otro. Además, filtrar el flujo de datos para aplicar una lógica de procesamiento diferente agregaría otro paso al trabajo
  3. La creación de múltiples secuencias ayudaría de dos maneras: 1. No es necesario que aplique la operación de filtro para procesar diferentes temas de manera diferente. 2. Puede leer varios flujos en paralelo (en lugar de uno por uno en caso de un solo flujo). Para hacerlo, hay un parámetro de configuración no documentado spark.streaming.concurrentJobs* . Entonces, decidí crear múltiples flujos.

    sparkConf.set("spark.streaming.concurrentJobs", "4");